import operator def social_rating(param): """ 社会部分打分 Parameters: param dict 填报问卷 Returns: score float 社会部分得分 """ result = dict() result['离职人数占比'] = calculation_01(param) result['人均薪酬涨幅'] = calculation_02(param) result['劳动合同中的工作时长(周)'] = calculation_03(param) result['劳动纠纷'] = calculation_04(param) result['安全事故'] = calculation_05(param) result['提供培训'] = calculation_06(param) result['社保缴纳是否符合当地标准'] = calculation_07(param) result['公积金缴纳是否符合当地标准'] = calculation_08(param) result['是否提供员工体检'] = calculation_09(param) result['是否提供带薪假期'] = calculation_10(param) result['公司从前三大供货商拿货占比'] = calculation_11(param) result['公司前3大客户销量占比'] = calculation_12(param) result['公司返修、退回、投诉产品比例(%)'] = calculation_13(param) result['扶贫+捐赠规模(万元)'] = calculation_14(param) result['司法风险'] = calculation_15(param) fraction = list() if result['司法风险'] == 'S=0': score = 0 else: for key, value in result.items(): if key == '司法风险': continue else: fraction.append(value) score = sum(fraction) result['合计'] = score return result def calculation_01(param): """ 离职人数占比 Parameters: param dict 填报问卷 Returns: score int 得分 """ # Parameter three_year_data = sorted(param['社会问卷']['近三年公司数据'], key=operator.itemgetter('年份'), reverse=False) try: year_begin = round(three_year_data[0]['当年离职人数'] / three_year_data[0]['员工总数(年底)'], 2) year_middle = round(three_year_data[1]['当年离职人数'] / three_year_data[1]['员工总数(年底)'], 2) year_end = round(three_year_data[2]['当年离职人数'] / three_year_data[2]['员工总数(年底)'], 2) factor_01 = (year_begin + year_middle + year_end) / 3 * 100 <= 20 factor_02 = 20 < (year_begin + year_middle + year_end) / 3 * 100 <= 30 if factor_01: score = 5 elif factor_02: score = 2 else: score = 0 except ZeroDivisionError: score = 0 return score def calculation_02(param): """ 人均薪酬涨幅 Parameters: param dict 填报问卷 Returns: score int 得分 """ # Parameter three_year_data = sorted(param['社会问卷']['近三年公司数据'], key=operator.itemgetter('年份'), reverse=False) try: year_begin = three_year_data[0]['人均薪酬水平(元/月)'] year_end = three_year_data[2]['人均薪酬水平(元/月)'] factor = (year_end / year_begin) ** (1 / 2) - 1 >= 0.03 if factor: score = 2 else: score = 0 except ZeroDivisionError: score = 0 return score def calculation_03(param): """ 劳动合同中的工作时长(周) Parameters: param dict 填报问卷 Returns: score int 得分 """ # Parameter three_year_data = sorted(param['社会问卷']['近三年公司数据'], key=operator.itemgetter('年份'), reverse=False) year_begin = three_year_data[0]['劳动合同要求工作时长(每周小时数)'] year_middle = three_year_data[1]['劳动合同要求工作时长(每周小时数)'] year_end = three_year_data[2]['劳动合同要求工作时长(每周小时数)'] factor = (year_end + year_middle + year_begin) / 3 <= 45 if factor: score = 4 else: score = 0 return score def calculation_04(param): """ 劳动纠纷 Parameters: param dict 填报问卷 Returns: score int 得分 """ # Parameter three_year_data = sorted(param['社会问卷']['近三年公司数据'], key=operator.itemgetter('年份'), reverse=False) year_begin = three_year_data[0]['劳资纠纷次数'] year_middle = three_year_data[1]['劳资纠纷次数'] year_end = three_year_data[2]['劳资纠纷次数'] factor = (year_end + year_middle + year_begin) <= 0 if factor: score = 3 else: score = 0 return score def calculation_05(param): """ 安全事故 Parameters: param dict 填报问卷 Returns: score int 得分 """ # Parameter three_year_data = sorted(param['社会问卷']['近三年公司数据'], key=operator.itemgetter('年份'), reverse=False) year_begin = three_year_data[0]['安全事故发生次数'] year_middle = three_year_data[1]['安全事故发生次数'] year_end = three_year_data[2]['安全事故发生次数'] factor = (year_end + year_middle + year_begin) <= 0 if factor: score = 3 else: score = 0 return score def calculation_06(param): """ 提供培训 Parameters: param dict 填报问卷 Returns: score int 得分 """ # Parameter three_year_data = sorted(param['社会问卷']['近三年公司数据'], key=operator.itemgetter('年份'), reverse=False) year_begin = three_year_data[0]['组织培训次数'] year_middle = three_year_data[1]['组织培训次数'] year_end = three_year_data[2]['组织培训次数'] factor_01 = (year_end + year_middle + year_begin) >= 4 factor_02 = (year_end + year_middle + year_begin) >= 1 if factor_01: score = 5 elif factor_02: score = 2 else: score = 0 return score def calculation_07(param): """ 社保缴纳是否符合当地标准 Parameters: param dict 填报问卷 Returns: score int 得分 """ anwser = param['社会问卷']['其他类型问卷'][0] if anwser == 'A': score = 1 else: score = 0 return score def calculation_08(param): """ 公积金缴纳是否符合当地标准 Parameters: param dict 填报问卷 Returns: score int 得分 """ anwser = param['社会问卷']['其他类型问卷'][1] if anwser == 'A': score = 1 else: score = 0 return score def calculation_09(param): """ 是否提供员工体检 Parameters: param dict 填报问卷 Returns: score int 得分 """ anwser = param['社会问卷']['其他类型问卷'][2] if anwser == 'A': score = 1 else: score = 0 return score def calculation_10(param): """ 是否提供带薪假期 Parameters: param dict 填报问卷 Returns: score int 得分 """ anwser = param['社会问卷']['其他类型问卷'][3] if anwser == 'A': score = 1 else: score = 0 return score def calculation_11(param): """ 公司从前三大供货商拿货占比 Parameters: param dict 填报问卷 Returns: score int 得分 """ # Parameter three_year_data = sorted(param['社会问卷']['近三年公司数据'], key=operator.itemgetter('年份'), reverse=False) year_begin = three_year_data[0]['公司从前3大供应商拿货占全部供应商比例(%)'] year_end = three_year_data[2]['公司从前3大供应商拿货占全部供应商比例(%)'] factor = year_begin >= year_end if factor: score = 1 else: score = 0 return score def calculation_12(param): """ 公司前3大客户销量占比 Parameters: param dict 填报问卷 Returns: score int 得分 """ # Parameter three_year_data = sorted(param['社会问卷']['近三年公司数据'], key=operator.itemgetter('年份'), reverse=False) year_begin = three_year_data[0]['公司前3大客户销售额占全部销售比例(%)'] year_end = three_year_data[2]['公司前3大客户销售额占全部销售比例(%)'] factor = year_begin >= year_end if factor: score = 1 else: score = 0 return score def calculation_13(param): """ 公司返修、退回、投诉产品比例(%) Parameters: param dict 填报问卷 Returns: score int 得分 """ # Parameter three_year_data = sorted(param['社会问卷']['近三年公司数据'], key=operator.itemgetter('年份'), reverse=False) year_end = three_year_data[0]['返修、退回、投诉产品对应销售额占全部销售比例(%)'] year_begin = three_year_data[2]['返修、退回、投诉产品对应销售额占全部销售比例(%)'] factor = year_begin >= year_end if factor: score = 1 else: score = 0 return score def calculation_14(param): """ 扶贫+捐赠规模(万元) Parameters: param dict 填报问卷 Returns: score int 得分 """ # Parameter three_year_data = sorted(param['社会问卷']['近三年公司数据'], key=operator.itemgetter('年份'), reverse=False) year_begin = three_year_data[0]['扶贫+捐赠规模(万元)'] year_middle = three_year_data[1]['扶贫+捐赠规模(万元)'] year_end = three_year_data[2]['扶贫+捐赠规模(万元)'] factor_01 = (year_end + year_middle + year_begin) > 0 if factor_01: score = 5 else: score = 0 return score def calculation_15(param): """ 司法风险 Parameters: param dict 填报问卷 Returns: score int 得分 """ risk = param['风险数据'] score = None for value in risk.values(): if value > 0: score = 'S=0' break else: score = 0 return score