Пример #1
0
def import_rules_identity_sim_card_ownerships_i3(ds: DataService):
    # define Identities(I)' rules of sim_care_ownership master: level 2
    rule = create_new_rule(2, 'I', 'I3', 'مالکیت خط تلفن همراه', 2)
    ds.insert_rule(rule)

    # define Identities(I)' rules of sim_care_ownership details: level 3
    # SimCardOwnership = Yes	20	I0301P20    2%	تطابق هویت واقعی کاربر با مشخصات مالک خط تلفن همراه در سامانه شاهکار
    rule = create_new_rule(
        3, 'I3', 'I0301P20',
        'تطابق هویت واقعی کاربر با مشخصات مالک خط تلفن همراه در سامانه شاهکار',
        2, 20, 1)
    ds.insert_rule(rule)
    rule_codes: List[str] = [rule.code]

    # SimCardOwnership = No	00	I0302P0     0%	عدم تطابق هویت واقعی کاربر با مشخصات مالک خط تلفن همراه
    rule = create_new_rule(
        3, 'I3', 'I0302P0',
        'عدم تطابق هویت واقعی کاربر با مشخصات مالک خط تلفن همراه', 0, 0, 0)
    ds.insert_rule(rule)
    rule_codes.append(rule.code)
    print('Identities(I) sim_card_ownerships_i3 rules are created.')
    ds.delete_score_reasons(
        {RULE_MASTER_CODE: I3_RULES_PROFILE_SIM_CARD_OWNERSHIPS})
    change_reason = create_new_score_reason(
        I3_RULES_PROFILE_SIM_CARD_OWNERSHIPS, rule_codes,
        'تایید مالکیت خط تلفن همراه', 'عدم تایید مالکیت خط تلفن همراه')
    ds.insert_score_reason(change_reason)
    print('Identities(I) sim_card_ownerships_i3 change reasons are created.')
Пример #2
0
def import_rules_identity_address_verifications_i4(ds: DataService):
    # define Identities(I)' rules of address_verifications master: level 2
    rule = create_new_rule(2, 'I', 'I4', 'احراز اصالت محل سکونت', 2)
    ds.insert_rule(rule)

    # define Identities(I)' rules of address_verifications details: level 3
    # AddressVerification = Yes	20	I0401P20    2%	احراز اصالت نشانی محل سکونت کاربر از طریق وارد کردن رمز پستی
    rule = create_new_rule(
        3, 'I4', 'I0401P20',
        'احراز اصالت نشانی محل سکونت کاربر از طریق وارد کردن رمز پستی', 2, 20,
        1)
    ds.insert_rule(rule)
    rule_codes: List[str] = [rule.code]

    # AddressVerification = No	00	I0402P0 0%	عدم احراز اصالت نشانی محل سکونت کاربر
    rule = create_new_rule(
        3, 'I4', 'I0402P0',
        'تطابق هویت واقعی کاربر با مشخصات مالک خط تلفن همراه در سامانه شاهکار',
        0, 0, 0)
    ds.insert_rule(rule)
    rule_codes.append(rule.code)
    print('Identities(I) address_verifications_i4 rules are created.')
    ds.delete_score_reasons(
        {RULE_MASTER_CODE: I4_RULES_PROFILE_ADDRESS_VERIFICATIONS})
    change_reason = create_new_score_reason(
        I4_RULES_PROFILE_ADDRESS_VERIFICATIONS, rule_codes,
        'تایید نشانی محل سکونت', 'عدم تایید نشانی محل سکونت')
    ds.insert_score_reason(change_reason)
    print('Identities(I) address_verifications_i4 change reasons are created.')
def import_score_gauges(ds: DataService):
    # ds.db.get_collection('scoreGauges').remove()
    ds.db.scoreGauges.delete_many({})
    sg = ScoreGauge()
    sg.start = 0
    sg.end = 499
    sg.title = 'خیلی ضعیف'
    sg.color = 'fe3030'
    sg.risk_status = 'بسیار بالا'
    ds.insert_score_gauge(sg)

    sg = ScoreGauge()
    sg.start = 500
    sg.end = 589
    sg.title = 'ضعیف'
    sg.color = 'ff6800'
    sg.risk_status = 'بالا'
    ds.insert_score_gauge(sg)

    sg = ScoreGauge()
    sg.start = 590
    sg.end = 669
    sg.title = 'متوسط'
    sg.color = 'ffbb5e'
    sg.risk_status = 'متوسط'
    ds.insert_score_gauge(sg)

    sg = ScoreGauge()
    sg.start = 670
    sg.end = 749
    sg.title = 'خوب'
    sg.color = 'a6d94c'
    sg.risk_status = 'پایین'
    ds.insert_score_gauge(sg)

    sg = ScoreGauge()
    sg.start = 750
    sg.end = 1000
    sg.title = 'عالی'
    sg.color = '00d184'
    sg.risk_status = 'بسیار پایین'
    ds.insert_score_gauge(sg)
Пример #4
0
def import_rule_history_master(ds: DataService):
    # Delete all histories(H) rules
    l2_rules: {Rule} = ds.get_rules({PARENT: HISTORIES})
    for r in l2_rules:
        # delete all l3_rules
        ds.delete_rules({PARENT: r[CODE]})

    # delete all l2_rules
    ds.delete_rules({PARENT: HISTORIES})
    # delete the l1_rule
    ds.delete_rules({CODE: HISTORIES})
    print('Histories(H) rules are deleted.')

    # define Identities(I)' rules master: level 1
    rule = create_new_rule(1, None, 'H', 'سوابق تعاملات', 30, 270)
    ds.insert_rule(rule)
    print('Histories(H) master rule is created.')
Пример #5
0
def import_rule_timeliness_master(ds: DataService):
    # Delete all Timeliness(T) rules
    l2_rules: {Rule} = ds.get_rules({PARENT: TIMELINESS})
    for r in l2_rules:
        # delete all l3_rules
        ds.delete_rules({PARENT: r[CODE]})

    # delete all l2_rules
    ds.delete_rules({PARENT: TIMELINESS})
    # delete the l1_rule
    ds.delete_rules({CODE: TIMELINESS})
    print('Timeliness(T) rules are deleted.')

    # define Timeliness(T)' rules master: level 1
    # rule.drop_collection()
    rule = create_new_rule(1, None, 'T', 'انجام به موقع تعهدات', 35, 270)
    ds.insert_rule(rule)
    print('Timeliness(T) master rule is created.')
Пример #6
0
def import_rule_identity_master(ds: DataService):
    # Delete all identities(I) rules
    # l2_rules: [Rule] = Rule.objects(Q(parent='I'))
    l2_rules: {Rule} = ds.get_rules({PARENT: IDENTITIES})
    for r in l2_rules:
        # l3_rules: [Rule] = Rule.objects(Q(parent=r.code))
        # l3_rules.delete()
        ds.delete_rules({PARENT: r[CODE]})
    # l2_rules.delete()
    ds.delete_rules({PARENT: IDENTITIES})

    # l1_rule = Rule.objects(Q(code='I'))
    # l1_rule.delete()
    ds.delete_rules({CODE: IDENTITIES})
    print('Identities(I) rules are deleted.')
    # define Identities(I)' rules master: level 1
    rule = create_new_rule(1, None, 'I', 'اطلاعات هویتی', 10, 100)
    ds.insert_rule(rule)
    print('Identities(I) master rule is created.')
Пример #7
0
def import_rules_identity_has_kycs_i1(ds: DataService):
    # define Identities(I)' rules of kycs master: level 2
    rule = create_new_rule(2, 'I', 'I1', 'احراز هویت', 4)
    ds.insert_rule(rule)

    # define Identities(I)' rules of kycs details: level 3
    # KYC = Yes	40	I0101P40    %4	احراز هویت نهایی از طریق استعلام ثبت احوال
    rule = create_new_rule(3, 'I1', 'I0101P40',
                           'احراز هویت نهایی از طریق استعلام ثبت احوال', 4, 40,
                           1)
    ds.insert_rule(rule)
    rule_codes: List[str] = [rule.code]

    # KYC = No	00	I0102P0 0%	عدم احراز هویت
    rule = create_new_rule(3, 'I1', 'I0102P0', 'عدم احراز هویت', 0, 0, 0)
    ds.insert_rule(rule)
    rule_codes.append(rule.code)
    print('Identities(I) has_kycs_i1 rules are created.')
    ds.delete_score_reasons({RULE_MASTER_CODE: I1_RULES_PROFILE_HAS_KYCS})
    change_reason = create_new_score_reason(
        I1_RULES_PROFILE_HAS_KYCS, rule_codes,
        'احراز هویت نهایی از طریق استعلام ثبت احوال')
    ds.insert_score_reason(change_reason)
    print('Identities(I) has_kycs_i1 change reasons are created.')
Пример #8
0
def import_rules_history_done_timely_trades_of_last_3_months_h6(ds: DataService):
    # define History(H)' rules of done_timely_trades_of_last_3_months master: level 2
    rule = create_new_rule(2, 'H', 'H6', 'تعداد تعاملات موفق در 3 ماه گذشته', 4.44, 40)
    ds.insert_rule(rule)

    # define History(H)' rules of done_timely_trades_of_last_3_months details: level 3
    # Last3MSD = 0	00	H0601P0	کاربر در سه ماه گذشته هیچ تعامل موفقی با سایر کاربران نداشته است
    rule = create_new_rule(3, 'H6', 'H0601P0', 'کاربر در سه ماه گذشته هیچ تعامل موفقی با سایر کاربران نداشته است', 0, 0, 0, 0)
    ds.insert_rule(rule)
    rule_codes: List[str] = [rule.code]

    # Last3MSD = 1	10	H0602P10	کاربر در سه ماه گذشته 1 تعامل موفق با سایر کاربران داشته است
    rule = create_new_rule(3, 'H6', 'H0602P10', 'کاربر در سه ماه گذشته 1 تعامل موفق با سایر کاربران داشته است', 1.11, 10, 1, 1)
    ds.insert_rule(rule)
    rule_codes.append(rule.code)

    # Last3MSD = 2	20	H0603P20	کاربر در سه ماه گذشته ۲ تعامل موفق با سایر کاربران داشته است
    rule = create_new_rule(3, 'H6', 'H0603P20', 'کاربر در سه ماه گذشته ۲ تعامل موفق با سایر کاربران داشته است', 2.22, 20, 2, 2)
    ds.insert_rule(rule)
    rule_codes.append(rule.code)

    # Last3MSD = 3	30	H0604P30	کاربر در سه ماه گذشته 3 تعامل موفق با سایر کاربران داشته است
    rule = create_new_rule(3, 'H6', 'H0601P0', 'کاربر در سه ماه گذشته 3 تعامل موفق با سایر کاربران داشته است', 3.33, 30, 3, 3)
    ds.insert_rule(rule)
    rule_codes.append(rule.code)

    # Last3MSD ≥ 4	40	H0605P40	کاربر در سه ماه گذشته بیش از 3 تعامل موفق با سایر کاربران داشته است
    rule = create_new_rule(3, 'H6', 'H0605P40', 'کاربر در سه ماه گذشته بیش از 3 تعامل موفق با سایر کاربران داشته است', 4.44, 40, 4, 999)
    ds.insert_rule(rule)
    print('Histories(H) done_timely_trades_of_last_3_months_h6 rules are created.')
    ds.delete_score_reasons({RULE_MASTER_CODE: H6_RULES_DONE_TIMELY_TRADES_OF_LAST_3_MONTHS})
    change_reason = create_new_score_reason(H6_RULES_DONE_TIMELY_TRADES_OF_LAST_3_MONTHS, rule_codes, 'افزایش معاملات موفق در سه ماه گذشته', 'کاهش معاملات موفق در سه ماه گذشته')
    ds.insert_score_reason(change_reason)
    print('Histories(H) done_timely_trades_of_last_3_months_h6 change reasons are created.')
Пример #9
0
def import_rules_history_loans_total_count_h11(ds: DataService):
    # define History(H)' rules of undone_undue_trades_counts master: level 2
    rule = create_new_rule(2, 'H', 'H11', 'تعداد کل تسهیلات بانکی در جریان', 2.22, 20)
    ds.insert_rule(rule)

    # define History(H)' rules of undone_undue_trades_counts details: level 3
    # Loans = 0	00	H1101P0	کاربر هیچگونه تسهیلات در جریان ندارد
    rule = create_new_rule(3, 'H11', 'H1101P0', 'کاربر هیچگونه تسهیلات در جریان ندارد', 0, 0, 0, 0)
    ds.insert_rule(rule)
    rule_codes: List[str] = [rule.code]

    # Loans = 1	20	H1102P20	کاربر ۱ تسهیلات در جریان دارد
    rule = create_new_rule(3, 'H11', 'H1102P20', 'کاربر ۱ تسهیلات در جریان دارد', 2.22, 20, 1, 1)
    ds.insert_rule(rule)
    rule_codes.append(rule.code)
    ds.delete_score_reasons({RULE_MASTER_CODE: H11_RULES_LOAN_TOTAL_COUNTS})
    change_reason = create_new_score_reason(H11_RULES_LOAN_TOTAL_COUNTS, rule_codes, 'افزایش امکان سنجش رفتار اعتباری کاربر از طریق اخذ تسهیلات بانکی', 'کاهش امکان سنجش رفتار اعتباری کاربر به دلیل اتمام تسهیلات بانکی')
    ds.insert_score_reason(change_reason)
    print('Histories(H) loans_total_count_h11 part-1 change reasons are created.')

    # Loans = 2	10	H1103P10	کاربر ۲ تسهیلات در جریان دارد
    rule = create_new_rule(3, 'H11', 'H1103P10', 'کاربر ۲ تسهیلات در جریان دارد', 1.11, 10, 2, 2)
    ds.insert_rule(rule)
    rule_codes.append(rule.code)

    # Loans = 3	01	H1104P1	کاربر ۳ تسهیلات در جریان دارد
    rule = create_new_rule(3, 'H11', 'H1104P1', 'کاربر ۳ تسهیلات در جریان دارد', 0.11, 1, 3, 3)
    ds.insert_rule(rule)
    rule_codes.append(rule.code)

    # Loans = 4	-20	H1105N20	کاربر ۴ تسهیلات در جریان دارد
    rule = create_new_rule(3, 'H11', 'H1105N20', 'کاربر ۴ تسهیلات در جریان دارد', 2.22, -20, 4, 4)
    ds.insert_rule(rule)
    rule_codes.append(rule.code)

    # Loans = 5	-30	H1106N30	کاربر ۵ تسهیلات در جریان دارد
    rule = create_new_rule(3, 'H11', 'H1106N30', 'کاربر ۵ تسهیلات در جریان دارد', 3.33, -30, 5, 5)
    ds.insert_rule(rule)
    rule_codes.append(rule.code)

    # Loans >= 6	-50	H1107N50	کاربر بیش از ۵ تسهیلات در جریان دارد
    rule = create_new_rule(3, 'H11', 'H1107N50', 'کاربر بیش از ۵ تسهیلات در جریان دارد', 5.56, -50, 6, rules_max_val)
    ds.insert_rule(rule)
    rule_codes.append(rule.code)
    print('Histories(H) loans_total_count_h11 rules are created.')
    change_reason = create_new_score_reason(H11_RULES_LOAN_TOTAL_COUNTS, rule_codes, 'کاهش تعداد تسهیلات بانکی در جریان', 'افزایش تعداد تسهیلات بانکی در جریان')
    ds.insert_score_reason(change_reason)
    print('Histories(H) loans_total_count_h11 part-2 change reasons are created.')
Пример #10
0
def import_rules_history_membership_days_counts_h5(ds: DataService):
    # define History(H)' rules of membership_days master: level 2
    rule = create_new_rule(2, 'H', 'H5', 'مدت زمان عضویت فعال', 6.67, 60)
    ds.insert_rule(rule)

    # define History(H)' rules of membership_days details: level 3
    # Just Registered MembershipDaysWithAtleast1SD == 0 	00	H0501P0	عضو جدید
    rule = create_new_rule(3, 'H5', 'H0501P0', 'عضو جدید', 0, 0, 0)
    ds.insert_rule(rule)
    rule_codes: List[str] = [rule.code]

    #  1 <=  MembershipDaysWithAtleast1SD ≤ 90	    10	H0502P10	 عضویت بین 1 تا 90 روز
    rule = create_new_rule(3, 'H5', 'H0502P10', ' عضویت بین 1 تا 90 روز', 1.11, 10, 1, 90)
    ds.insert_rule(rule)
    rule_codes.append(rule.code)

    # 91 <=  MembershipDaysWithAtleast3SD ≤ 180	    20	H0503P20	 عضویت بین 91 تا 180 روز
    rule = create_new_rule(3, 'H5', 'H0503P20', 'عضویت بین 91 تا 180 روز', 2.22, 20, 91, 180)
    ds.insert_rule(rule)
    rule_codes.append(rule.code)

    # 181 <=  MembershipDaysWithAtleast5SD ≤ 365	30	H0504P30	 عضویت بین 181 تا 365 روز
    rule = create_new_rule(3, 'H5', 'H0504P30', ' عضویت بین 181 تا 365 روز', 3.33, 30, 181, 365)
    ds.insert_rule(rule)
    rule_codes.append(rule.code)

    # 366 <= MembershipDaysWithAtleast10SD ≤ 720	40	H0505P40	 عضویت بین 366 تا 720 روز
    rule = create_new_rule(3, 'H5', 'H0505P40', ' عضویت بین 366 تا 720 روز', 4.44, 40, 366, 720)
    ds.insert_rule(rule)
    rule_codes.append(rule.code)

    # 721 <= MembershipDaysWithAtleast15SD ≤ 1080	50	H0506P50	 عضویت بین 721 تا 1080 روز
    rule = create_new_rule(3, 'H5', 'H0506P50', ' عضویت بین 721 تا 1080 روز', 5.50, 50, 721, 1080)
    ds.insert_rule(rule)
    rule_codes.append(rule.code)

    #     MembershipDaysWithAtleast20SD >= 1081	    60	H0507P60	 عضویت بیش از 1081 روز
    rule = create_new_rule(3, 'H5', 'H0507P60', ' عضویت بیش از 1081 روز', 6.67, 60, 1081, rules_max_val)
    ds.insert_rule(rule)
    rule_codes.append(rule.code)
    print('Histories(H) membership_days_counts_h5 rules are created.')
    ds.delete_score_reasons({RULE_MASTER_CODE: H5_RULES_PROFILE_MEMBERSHIP_DAYS_COUNTS})
    change_reason = create_new_score_reason(H5_RULES_PROFILE_MEMBERSHIP_DAYS_COUNTS, rule_codes, 'افزایش مدت عضویت فعال')
    ds.insert_score_reason(change_reason)
    print('Histories(H) membership_days_counts_h5 change reasons are created.')
Пример #11
0
def import_rules_history_undone_undue_trades_counts_h10(ds: DataService):
    # define History(H)' rules of undone_undue_trades_counts master: level 2
    rule = create_new_rule(2, 'H', 'H10', 'تعداد تعاملات جاری سررسید نشده', 1.11, 10)
    ds.insert_rule(rule)

    # define History(H)' rules of undone_undue_trades_counts details: level 3
    # NumNotDueDeal = 0 00 	H1001P0	کاربر تعامل سررسید نشده ندارد
    rule = create_new_rule(3, 'H10', 'H1001P0', 'کاربر تعامل سررسید نشده ندارد', 0, 0, 0, 0)
    ds.insert_rule(rule)
    rule_codes: List[str] = [rule.code]

    # NumNotDueDeal = 1 02	H1002P2	کاربر 1 تعامل سررسید نشده دارد
    rule = create_new_rule(3, 'H10', 'H1002P2', 'کاربر 1 تعامل سررسید نشده دارد', 0.22, 2, 1, 1)
    ds.insert_rule(rule)
    rule_codes.append(rule.code)

    # NumNotDueDeal = 2	05	H1003P5	کاربر 2 تعامل سررسید نشده دارد
    rule = create_new_rule(3, 'H10', 'H1003P5', 'کاربر 2 تعامل سررسید نشده دارد', 0.56, 5, 2, 2)
    ds.insert_rule(rule)
    rule_codes.append(rule.code)

    # NumNotDueDeal = 3	7	H1004P7	کاربر 3 تعامل سررسید نشده دارد
    rule = create_new_rule(3, 'H10', 'H1004P7', 'کاربر 3 تعامل سررسید نشده دارد', 0.78, 7, 3, 3)
    ds.insert_rule(rule)
    rule_codes.append(rule.code)

    # NumNotDueDeal = 4	10	H1005P10	کاربر 4 تعامل سررسید نشده دارد
    rule = create_new_rule(3, 'H10', 'H1005P10', 'کاربر 4 تعامل سررسید نشده دارد', 1.11, 10, 4, 4)
    ds.insert_rule(rule)
    rule_codes.append(rule.code)
    ds.delete_score_reasons({RULE_MASTER_CODE: H10_RULES_UNDONE_UNDUE_TRADES_COUNTS})
    change_reason = create_new_score_reason(H10_RULES_UNDONE_UNDUE_TRADES_COUNTS, rule_codes, 'افزایش امکان سنجش رفتار اعتباری کاربر از طریق افزایش معاملات جاری', 'کاهش امکان سنجش رفتار اعتباری کاربر به دلیل کاهش معاملات جاری')
    ds.insert_score_reason(change_reason)
    print('Histories(H) undone_undue_trades_counts_h10 part1 change reasons are created.')

    # NumNotDueDeal = 5	03	H1006P3	کاربر 5 تعامل سررسید نشده دارد
    rule = create_new_rule(3, 'H10', 'H1006P3', 'کاربر 5 تعامل سررسید نشده دارد', 0.33, 3, 5, 5)
    ds.insert_rule(rule)
    rule_codes: List[str] = [rule.code]

    # NumNotDueDeal = 6	-1	H1007N1	کاربر 6 تعامل سررسید نشده دارد
    rule = create_new_rule(3, 'H10', 'H1007N1', 'کاربر 6 تعامل سررسید نشده دارد', 0.11, -1, 6, 6)
    ds.insert_rule(rule)
    rule_codes.append(rule.code)

    # 7 <= NumNotDueDeal ≤ 10	-10	H1008N10	کاربر بین 7 تا 10 تعامل سررسید نشده دارد
    rule = create_new_rule(3, 'H10', 'H1008N10', 'کاربر بین 7 تا 10 تعامل سررسید نشده دارد', 1.11, -10, 7, 10)
    ds.insert_rule(rule)
    rule_codes.append(rule.code)

    # 11 <= NumNotDueDeal ≤ 20	-20	H1009N20	کاربر بین 11 تا 20 تعامل سررسید نشده دارد
    rule = create_new_rule(3, 'H10', 'H1009N20', 'کاربر بین 11 تا 20 تعامل سررسید نشده دارد', 2.22, -20, 11, 20)
    ds.insert_rule(rule)
    rule_codes.append(rule.code)

    # 21 <= NumNotDueDeal ≤ 30	-30	H1010N30	کاربر بین 21 تا 30 تعامل سررسید نشده دارد
    rule = create_new_rule(3, 'H10', 'H1010N30', 'کاربر بین 21 تا 30 تعامل سررسید نشده دارد', 3.33, -30, 21, 30)
    ds.insert_rule(rule)
    rule_codes.append(rule.code)

    # NotDueDeal >= 31	-50	H1011N50	کاربر بیش از 30 تعامل سررسید نشده دارد
    rule = create_new_rule(3, 'H10', 'H1011N50', 'کاربر بیش از 30 تعامل سررسید نشده دارد', 5.56, -50, 31, 999)
    ds.insert_rule(rule)
    rule_codes.append(rule.code)
    print('Histories(H) undone_undue_trades_counts_h10 rules are created.')
    change_reason = create_new_score_reason(H10_RULES_UNDONE_UNDUE_TRADES_COUNTS, rule_codes, 'کاهش تعداد معاملات جاری', 'افزایش بیش از حد تعداد معاملات جاری')
    ds.insert_score_reason(change_reason)
    print('Histories(H) undone_undue_trades_counts_h10 part2 change reasons are created.')
Пример #12
0
def import_rules_timeliness_unfixed_returned_cheques_count_of_more_12_months_t31(ds: DataService):
    # define Timeliness(T)' rules of done_arrear_trades_of_last_3_months master: level 2
    rule = create_new_rule(2, 'T', 'T31', 'تعداد چک‌های برگشتی رفع سو اثر نشده در بیش از ۱۲ ماه گذشته', 2.59, 20)
    ds.insert_rule(rule)

    # define Timeliness(T)' rules of done_arrear_trades_of_last_3_months details: level 3
    # DishonouredChequesA12M = 0	20	T3101P20	کاربر چک برگشتی ندارد
    rule = create_new_rule(3, 'T31', 'T3101P20', 'کاربر چک برگشتی ندارد', 2.59, 20, 0, 0)
    ds.insert_rule(rule)
    rule_codes: List[str] = [rule.code]

    # DishonouredChequesA12M = 1	-40	T3102N40	کاربر ۱ چک برگشتی دارد
    rule = create_new_rule(3, 'T31', 'T3102N40', 'کاربر ۱ چک برگشتی دارد', 5.19, -40, 1, 1)
    ds.insert_rule(rule)
    rule_codes.append(rule.code)

    # DishonouredChequesA12M = 2	-50	T3103N50	کاربر ۲ چک برگشتی دارد
    rule = create_new_rule(3, 'T31', 'T3103N50', 'کاربر ۲ چک برگشتی دارد', 6.48, -50, 2, 2)
    ds.insert_rule(rule)
    rule_codes.append(rule.code)

    # DishonouredChequesA12M = 3	-60	T3104N60	کاربر ۳ چک برگشتی دارد
    rule = create_new_rule(3, 'T31', 'T3104N60', 'کاربر ۳ چک برگشتی دارد', 7.78, -60, 3, 3)
    ds.insert_rule(rule)
    rule_codes.append(rule.code)

    # DishonouredChequesA12M >= 4	-70	T3105N70	کاربر بیش از ۳ چک برگشتی دارد
    rule = create_new_rule(3, 'T31', 'T3105N70', 'کاربر بیش از ۳ چک برگشتی دارد', 9.07, -70, 4, rules_max_val)
    ds.insert_rule(rule)
    rule_codes.append(rule.code)
    print('Timeliness(T) unfixed_returned_cheques_count_of_more_12_months_t31 rules are created.')
    ds.delete_score_reasons({RULE_MASTER_CODE: T31_RULES_CHEQUE_UNFIXED_RETURNED_COUNT_OF_MORE_12_MONTHS})
    change_reason = create_new_score_reason(T31_RULES_CHEQUE_UNFIXED_RETURNED_COUNT_OF_MORE_12_MONTHS, rule_codes, 'کاهش تعداد چک‌های برگشتی رفع سو اثر نشده در بیش از یک سال گذشته', 'افزایش تعداد چک‌های برگشتی رفع سو اثر نشده در بیش از یک سال گذشته')
    ds.insert_score_reason(change_reason)
    print('Timeliness(T) unfixed_returned_cheques_count_of_more_12_months_t31 change reasons are created.')
Пример #13
0
def import_rules_timeliness_suspicious_loans_total_count_t35(ds: DataService):
    # define Timeliness(T)' rules of done_arrear_trades_of_last_3_months master: level 2
    rule = create_new_rule(2, 'T', 'T35', 'تعداد تسهیلات مشکوک الوصول در جریان', 3.89, 30)
    ds.insert_rule(rule)

    # define Timeliness(T)' rules of done_arrear_trades_of_last_3_months details: level 3
    # DoubfulCollectionLoans = 0	30	T3501P30	کاربر تسهیلات مشکوک الوصول ندارد
    rule = create_new_rule(3, 'T35', 'T3501P30', 'کاربر تسهیلات مشکوک الوصول ندارد', 3.89, 30, 0, 0)
    ds.insert_rule(rule)
    rule_codes: List[str] = [rule.code]

    # DoubfulCollectionLoans = 1	-20	T3502N20	کاربر 1 تسهیلات مشکوک الوصول دارد
    rule = create_new_rule(3, 'T35', 'T3502N20', 'کاربر 1 تسهیلات مشکوک الوصول دارد', 2.59, -20, 1, 1)
    ds.insert_rule(rule)
    rule_codes.append(rule.code)

    # DoubfulCollectionLoans = 2	-30	T3503N30	کاربر ۲ تسهیلات مشکوک الوصول دارد
    rule = create_new_rule(3, 'T35', 'T3503N30', 'کاربر ۲ تسهیلات مشکوک الوصول دارد', 3.89, -30, 2, 2)
    ds.insert_rule(rule)
    rule_codes.append(rule.code)

    # DoubfulCollectionLoans = 3	-40	T3504N40	کاربر ۳ تسهیلات مشکوک الوصول دارد
    rule = create_new_rule(3, 'T35', 'T3504N40', 'کاربر ۳ تسهیلات مشکوک الوصول دارد', 5.19, -40, 3, 3)
    ds.insert_rule(rule)
    rule_codes.append(rule.code)

    # DoubfulCollectionLoans >= 4	-50	T3505N50	کاربر بیش از ۳ تسهیلات مشکوک الوصول دارد
    rule = create_new_rule(3, 'T35', 'T3505N50', 'کاربر بیش از ۳ تسهیلات مشکوک الوصول دارد', 6.48, -50, 4, rules_max_val)
    ds.insert_rule(rule)
    rule_codes.append(rule.code)
    print('Timeliness(T) suspicious_loans_total_count_t35 rules are created.')
    ds.delete_score_reasons({RULE_MASTER_CODE: T35_RULES_LOAN_SUSPICIOUS_TOTAL_COUNTS})
    change_reason = create_new_score_reason(T35_RULES_LOAN_SUSPICIOUS_TOTAL_COUNTS, rule_codes, 'کاهش تعداد تسهیلات مشکوک الوصول در جریان', 'افزایش تعداد تسهیلات مشکوک الوصول در جریان')
    ds.insert_score_reason(change_reason)
    print('Timeliness(T) suspicious_loans_total_count_t35 change reasons are created.')
Пример #14
0
    rule_codes.append(rule.code)

    # Loans = 5	-30	H1106N30	کاربر ۵ تسهیلات در جریان دارد
    rule = create_new_rule(3, 'H11', 'H1106N30', 'کاربر ۵ تسهیلات در جریان دارد', 3.33, -30, 5, 5)
    ds.insert_rule(rule)
    rule_codes.append(rule.code)

    # Loans >= 6	-50	H1107N50	کاربر بیش از ۵ تسهیلات در جریان دارد
    rule = create_new_rule(3, 'H11', 'H1107N50', 'کاربر بیش از ۵ تسهیلات در جریان دارد', 5.56, -50, 6, rules_max_val)
    ds.insert_rule(rule)
    rule_codes.append(rule.code)
    print('Histories(H) loans_total_count_h11 rules are created.')
    change_reason = create_new_score_reason(H11_RULES_LOAN_TOTAL_COUNTS, rule_codes, 'کاهش تعداد تسهیلات بانکی در جریان', 'افزایش تعداد تسهیلات بانکی در جریان')
    ds.insert_score_reason(change_reason)
    print('Histories(H) loans_total_count_h11 part-2 change reasons are created.')


def import_rules_histories(ds: DataService):
    import_rule_history_master(ds)
    import_rules_history_membership_days_counts_h5(ds)
    import_rules_history_done_timely_trades_of_last_3_months_h6(ds)
    import_rules_history_done_timely_trades_between_last_3_to_12_months_h7(ds)
    import_rules_history_recommended_to_others_counts_h8(ds)
    import_rules_history_star_counts_avgs_h9(ds)
    import_rules_history_undone_undue_trades_counts_h10(ds)
    import_rules_history_loans_total_count_h11(ds)


if __name__ == '__main__':
    import_rules_histories(DataService(get_db()))
Пример #15
0
def import_rules_timeliness_past_due_loans_total_count_t33(ds: DataService):
    # define Timeliness(T)' rules of done_arrear_trades_of_last_3_months master: level 2
    rule = create_new_rule(2, 'T', 'T33', 'تعداد تسهیلات سررسید گذشته در جریان', 1.30, 10)
    ds.insert_rule(rule)

    # define Timeliness(T)' rules of done_arrear_trades_of_last_3_months details: level 3
    # PastDueLoans = 0	10	T3301P10	کاربر تسهیلات سررسید گذشته ندارد
    rule = create_new_rule(3, 'T33', 'T3301P10', 'کاربر تسهیلات سررسید گذشته ندارد', 1.30, 10, 0, 0)
    ds.insert_rule(rule)
    rule_codes: List[str] = [rule.code]

    # PastDueLoans = 1	00	T3302P0	کاربر 1 تسهیلات سررسید گذشته دارد
    rule = create_new_rule(3, 'T33', 'T3302P0', 'کاربر 1 تسهیلات سررسید گذشته دارد', 0, 0, 1, 1)
    ds.insert_rule(rule)
    rule_codes.append(rule.code)

    # PastDueLoans = 2	-10	T3303N10	کاربر ۲ تسهیلات سررسید گذشته دارد
    rule = create_new_rule(3, 'T33', 'T3303N10', 'کاربر ۲ تسهیلات سررسید گذشته دارد', 1.30, -10, 2, 2)
    ds.insert_rule(rule)
    rule_codes.append(rule.code)

    # PastDueLoans = 3	-20	T3304N20	کاربر ۳ تسهیلات سررسید گذشته دارد
    rule = create_new_rule(3, 'T33', 'T3304N20', 'کاربر ۳ تسهیلات سررسید گذشته دارد', 2.59, -20, 3, 3)
    ds.insert_rule(rule)
    rule_codes.append(rule.code)

    # PastDueLoans >= 4	-30	T3305N30	کاربر بیش از ۳ تسهیلات سررسید گذشته دارد
    rule = create_new_rule(3, 'T33', 'T3305N30', 'کاربر بیش از ۳ تسهیلات سررسید گذشته دارد', 3.89, -30, 4, rules_max_val)
    ds.insert_rule(rule)
    rule_codes.append(rule.code)
    print('Timeliness(T) past_due_loans_total_count_t33 rules are created.')
    ds.delete_score_reasons({RULE_MASTER_CODE: T33_RULES_LOAN_PAST_DUE_TOTAL_COUNTS})
    change_reason = create_new_score_reason(T33_RULES_LOAN_PAST_DUE_TOTAL_COUNTS, rule_codes, 'کاهش تعداد تسهیلات سررسید گذشته در جریان', 'افزایش تعداد تسهیلات سررسید گذشته در جریان')
    ds.insert_score_reason(change_reason)
    print('Timeliness(T) past_due_loans_total_count_t33 change reasons are created.')
    sg.risk_status = 'بالا'
    ds.insert_score_gauge(sg)

    sg = ScoreGauge()
    sg.start = 590
    sg.end = 669
    sg.title = 'متوسط'
    sg.color = 'ffbb5e'
    sg.risk_status = 'متوسط'
    ds.insert_score_gauge(sg)

    sg = ScoreGauge()
    sg.start = 670
    sg.end = 749
    sg.title = 'خوب'
    sg.color = 'a6d94c'
    sg.risk_status = 'پایین'
    ds.insert_score_gauge(sg)

    sg = ScoreGauge()
    sg.start = 750
    sg.end = 1000
    sg.title = 'عالی'
    sg.color = '00d184'
    sg.risk_status = 'بسیار پایین'
    ds.insert_score_gauge(sg)


if __name__ == '__main__':
    import_score_gauges(DataService(get_db()))
def calculate_score(scenarios_dicts: [], user_id: int):
    ds = DataService()
    rds = RedisCaching(ds)
    cs = ScoreCalculationService(rds, ds)

    for scn_dict in scenarios_dicts:
        # Profile Score Calculation ..................................................
        recent_p = ds.get_user_profile(user_id)
        revised_p = create_revised_profile(user_id=user_id, recent_p=recent_p)
        if is_not_none(scn_dict['KYC']):
            revised_p.has_kyc = scn_dict['KYC']
        if is_not_none(scn_dict['Military']):
            revised_p.military_service_status = ProfileMilitaryServiceStatusEnum.__getitem__(
                scn_dict['Military'])
        if is_not_none(scn_dict['SimCard']):
            revised_p.sim_card_ownership = scn_dict['SimCard']
        if is_not_none(scn_dict['Address']):
            revised_p.address_verification = scn_dict['Address']
        if is_not_none(scn_dict['Membership']):
            revised_p.membership_date = date.today() - timedelta(
                days=int(scn_dict['Membership']))
        if is_not_none(scn_dict['Recommendation']):
            revised_p.recommended_to_others_count = scn_dict['Recommendation']
        if is_not_none(scn_dict['WeightedAveStars']):
            revised_p.star_count_average = scn_dict['WeightedAveStars']
        cs.calculate_user_profile_score(recent_p=recent_p, revised_p=revised_p)

        # DoneTrade Score Calculation ..................................................
        dt = DoneTrade(user_id=user_id)
        if is_not_none(scn_dict['Last3MSD']):
            dt.timely_trades_count_of_last_3_months = scn_dict['Last3MSD']
        if is_not_none(scn_dict['Last1YSD']):
            dt.timely_trades_count_between_last_3_to_12_months = scn_dict[
                'Last1YSD']
        if is_not_none(scn_dict['B30DayDelayLast3M']):
            dt.past_due_trades_count_of_last_3_months = scn_dict[
                'B30DayDelayLast3M']
        if is_not_none(scn_dict['B30DayDelayLast3-12M']):
            dt.past_due_trades_count_between_last_3_to_12_months = scn_dict[
                'B30DayDelayLast3-12M']
        if is_not_none(scn_dict['A30DayDelayLast3M']):
            dt.arrear_trades_count_of_last_3_months = scn_dict[
                'A30DayDelayLast3M']
        if is_not_none(scn_dict['A30DayDelay3-12M']):
            dt.arrear_trades_count_between_last_3_to_12_months = scn_dict[
                'A30DayDelay3-12M']
        if is_not_none(scn_dict['AverageDelayRatio']):
            dt.total_delay_days = scn_dict['AverageDelayRatio']
        if is_not_none(scn_dict['SDealAmountRatio']):
            # todo: 100000000 is fix Denominator that is all_other_users_done_trades_amount, it should be change later
            dt.trades_total_balance = round(
                float(scn_dict['SDealAmountRatio']) *
                ALL_USERS_AVERAGE_DEAL_AMOUNT)
        recent_dt = ds.get_user_done_trade(user_id)
        cs.calculate_user_done_trades_score(revised_p=revised_p,
                                            recent_dt=recent_dt,
                                            revised_dt=dt)
        ds.insert_or_update_done_trade(dt,
                                       update_flag=recent_dt.user_id
                                       is not None)

        # UndoneTrade Score Calculation ..................................................
        udt = UndoneTrade(user_id=user_id)
        if is_not_none(scn_dict['NumNotDueDeal']):
            udt.undue_trades_count = scn_dict['NumNotDueDeal']
        if is_not_none(scn_dict['UnfinishedB30DayDelay']):
            udt.past_due_trades_count = scn_dict['UnfinishedB30DayDelay']
        if is_not_none(scn_dict['UnfinishedA30DayDelay']):
            udt.arrear_trades_count = scn_dict['UnfinishedA30DayDelay']
        dt.trades_total_balance = get_zero_if_none(dt.trades_total_balance)
        if is_not_none(scn_dict['NotDueDealAmountRatio']):
            udt.undue_trades_total_balance_of_last_year = round(
                float(scn_dict['NotDueDealAmountRatio']) *
                dt.trades_total_balance)
        if is_not_none(scn_dict['UnfinishedB30Din1YRatio']):
            udt.past_due_trades_total_balance_of_last_year = round(
                float(scn_dict['UnfinishedB30Din1YRatio']) *
                dt.trades_total_balance)
        if is_not_none(scn_dict['UnfinishedA30Din1YRatio']):
            udt.arrear_trades_total_balance_of_last_year = round(
                float(scn_dict['UnfinishedA30Din1YRatio']) *
                dt.trades_total_balance)
        recent_udt = ds.get_user_undone_trade(user_id)
        cs.calculate_user_undone_trades_score(revised_p=revised_p,
                                              recent_udt=recent_udt,
                                              revised_udt=udt,
                                              dt=dt)
        ds.insert_or_update_undone_trade(udt,
                                         update_flag=recent_udt.user_id
                                         is not None)

        # Loan Score Calculation ..................................................
        ln = Loan(user_id=user_id)
        if is_not_none(scn_dict['Loans']):
            ln.loans_total_count = scn_dict['Loans']
        ln.loans_total_balance = ALL_USERS_AVERAGE_PRINCIPAL_INTEREST_AMOUNT
        if is_not_none(scn_dict['PastDueLoans']):
            ln.past_due_loans_total_count = int(scn_dict['PastDueLoans'])
        if is_not_none(scn_dict['DelayedLoans']):
            ln.arrear_loans_total_count = int(scn_dict['DelayedLoans'])
        if is_not_none(scn_dict['DoubfulCollectionLoans']):
            ln.suspicious_loans_total_count = int(
                scn_dict['DoubfulCollectionLoans'])
        if is_not_none(scn_dict['MonthlyInstallments']):
            ln.monthly_installments_total_balance = float(
                scn_dict['MonthlyInstallments'])
        if is_not_none(scn_dict['CurrentLoanAmountRatio']):
            ln.overdue_loans_total_balance = round(
                float(scn_dict['CurrentLoanAmountRatio']) *
                ln.loans_total_balance)
        if is_not_none(scn_dict['PastDueLoanAmountRatio']):
            ln.past_due_loans_total_balance = round(
                float(scn_dict['PastDueLoanAmountRatio']) *
                ln.loans_total_balance)
        if is_not_none(scn_dict['DelayedLoanAmountRatio']):
            ln.arrear_loans_total_balance = round(
                float(scn_dict['DelayedLoanAmountRatio']) *
                ln.loans_total_balance)
        if is_not_none(scn_dict['DoubtfulCollectionAmountRatio']):
            ln.suspicious_loans_total_balance = round(
                float(scn_dict['DoubtfulCollectionAmountRatio']) *
                ln.loans_total_balance)
        recent_ln = ds.get_user_loan(user_id)
        loan_score = cs.calculate_user_loans_score(revised_p=revised_p,
                                                   recent_ln=recent_ln,
                                                   revised_ln=ln)
        ds.insert_or_update_loan(ln, update_flag=recent_ln.user_id is not None)

        # Cheque Score Calculation ..................................................
        ch = Cheque(user_id=user_id)
        if is_not_none(scn_dict['DishonouredChequesL3M']):
            ch.unfixed_returned_cheques_count_of_last_3_months = scn_dict[
                'DishonouredChequesL3M']
        if is_not_none(scn_dict['DishonouredChequesL3-12M']):
            ch.unfixed_returned_cheques_count_between_last_3_to_12_months = scn_dict[
                'DishonouredChequesL3-12M']
        if is_not_none(scn_dict['DishonouredChequesA12M']):
            ch.unfixed_returned_cheques_count_of_more_12_months = scn_dict[
                'DishonouredChequesA12M']
        if is_not_none(scn_dict['AllDishonouredCheques']):
            ch.unfixed_returned_cheques_count_of_last_5_years = scn_dict[
                'AllDishonouredCheques']
        if is_not_none(scn_dict['DCAmountRatio']):
            ch.unfixed_returned_cheques_total_balance = round(
                float(scn_dict['DCAmountRatio']) *
                ALL_USERS_AVERAGE_UNFIXED_RETURNED_CHEQUES_AMOUNT)
        recent_ch = ds.get_user_cheque(user_id)
        cheque_score = cs.calculate_user_cheques_score(revised_p=revised_p,
                                                       recent_ch=recent_ch,
                                                       revised_ch=ch)
        ds.insert_or_update_cheque(ch,
                                   update_flag=recent_ch.user_id is not None)
        ds.insert_or_update_profile(revised_p,
                                    update_flag=recent_p.user_id is not None)
            self.rds_rules_undone_trades_service.cache_rules()
        return self.rds_rules_undone_trades_service

    def get_redis_caching_rules_loans_service(self, reset_cache=False):
        if self.rds_rules_loans_service is None:
            self.rds_rules_loans_service = RedisCachingRulesLoans(
                self.rds, self.ds)
        if reset_cache:
            self.rds_rules_loans_service.cache_rules()
        return self.rds_rules_loans_service

    def get_redis_caching_rules_cheques_service(self, reset_cache=False):
        if self.rds_rules_cheques_service is None:
            self.rds_rules_cheques_service = RedisCachingRulesCheques(
                self.rds, self.ds)
        if reset_cache:
            self.rds_rules_cheques_service.cache_rules()
        return self.rds_rules_cheques_service

    def cache_rules(self):
        RedisCachingRulesMasters(self.rds, self.ds).cache_rules()
        RedisCachingRulesProfiles(self.rds, self.ds).cache_rules()
        RedisCachingRulesDoneTrades(self.rds, self.ds).cache_rules()
        RedisCachingRulesUndoneTrades(self.rds, self.ds).cache_rules()
        RedisCachingRulesLoans(self.rds, self.ds).cache_rules()
        RedisCachingRulesCheques(self.rds, self.ds).cache_rules()


if __name__ == '__main__':
    RedisCaching(DataService()).cache_rules()
Пример #19
0
def import_rules_timeliness_done_past_due_trades_between_last_3_to_12_months_t23(ds: DataService):
    # define Timeliness(T)' rules of done_past_due_trades_between_last_3_to_12_months master: level 2
    rule = create_new_rule(2, 'T', 'T23', 'تعداد تعاملات سررسید گذشته (کمتر از 30 روز تاخیر) خاتمه یافته در ۳ تا ۱۲ ماه گذشته', 2.59, 20)
    ds.insert_rule(rule)

    # define Timeliness(T)' rules of done_past_due_trades_between_last_3_to_12_months details: level 3
    # B30DayDelayLast3-12M = 0	20	T2301P20	کاربر در یکسال گذشته هیچ تعامل سررسید گذشته‌ای نداشته است
    rule = create_new_rule(3, 'T23', 'T2301P20', 'کاربر در یکسال گذشته هیچ تعامل سررسید گذشته‌ای نداشته است', 2.59, 20, 0, 0)
    ds.insert_rule(rule)
    rule_codes: List[str] = [rule.code]

    # B30DayDelayLast3-12M = 1	15	T2302P15	کاربر در یکسال گذشته 1 تعامل سررسید گذشته‌ داشته است
    rule = create_new_rule(3, 'T23', 'T2302P15', 'کاربر در یکسال گذشته 1 تعامل سررسید گذشته‌ داشته است', 1.94, 15, 1, 1)
    ds.insert_rule(rule)
    rule_codes.append(rule.code)

    # 2 <= B30DayDelayLast3-12M ≤ 3	05	T2303P5	کاربر در یکسال گذشته بین 2 تا 3 تعامل سررسید گذشته‌ داشته است
    rule = create_new_rule(3, 'T23', 'T2303P5', 'کاربر در یکسال گذشته بین 2 تا 3 تعامل سررسید گذشته‌ داشته است', 0.65, 5, 2, 3)
    ds.insert_rule(rule)
    rule_codes.append(rule.code)

    # 4 <= B30DayDelayLast3-12M ≤ 6	-10	T2304N10	کاربر در یکسال گذشته بین 4 تا 6 تعامل سررسید گذشته‌ داشته است
    rule = create_new_rule(3, 'T23', 'T2304N10', 'کاربر در یکسال گذشته بین 4 تا 6 تعامل سررسید گذشته‌ داشته است', 1.30, -10, 4, 6)
    ds.insert_rule(rule)
    rule_codes.append(rule.code)

    # 7 <= B30DayDelayLast3-12M ≤ 10	-15	T2305N15	کاربر در یکسال گذشته بین 7 تا 10 تعامل سررسید گذشته‌ داشته است
    rule = create_new_rule(3, 'T23', 'T2305N15', 'کاربر در یکسال گذشته بین 7 تا 10 تعامل سررسید گذشته‌ داشته است', 1.94, -15, 7, 10)
    ds.insert_rule(rule)
    rule_codes.append(rule.code)

    # B30DayDelayLast3-12M >= 11	-20	T2306N20	کاربر در یکسال گذشته بیش از 10 تعامل سررسید گذشته‌ داشته است
    rule = create_new_rule(3, 'T23', 'T2306N20', 'کاربر در یکسال گذشته بیش از 10 تعامل سررسید گذشته‌ داشته است', 2.59, -20, 11,
                           rules_max_val)
    ds.insert_rule(rule)
    rule_codes.append(rule.code)
    print('Timeliness(T) done_past_due_trades_between_last_3_to_12_months_t23 rules are created.')
    ds.delete_score_reasons({RULE_MASTER_CODE: T23_RULES_DONE_PAST_DUE_TRADES_BETWEEN_LAST_3_TO_12_MONTHS})
    change_reason = create_new_score_reason(T23_RULES_DONE_PAST_DUE_TRADES_BETWEEN_LAST_3_TO_12_MONTHS, rule_codes, 'کاهش تعداد معاملات سررسید گذشته خاتمه یافته در یک سال گذشته', 'افزایش تعداد معاملات سررسید گذشته خاتمه یافته در یک سال گذشته')
    ds.insert_score_reason(change_reason)
    print('Timeliness(T) done_past_due_trades_between_last_3_to_12_months_t23 change reasons are created.')
Пример #20
0
    ds.insert_rule(rule)
    rule_codes: List[str] = [rule.code]

    # AddressVerification = No	00	I0402P0 0%	عدم احراز اصالت نشانی محل سکونت کاربر
    rule = create_new_rule(
        3, 'I4', 'I0402P0',
        'تطابق هویت واقعی کاربر با مشخصات مالک خط تلفن همراه در سامانه شاهکار',
        0, 0, 0)
    ds.insert_rule(rule)
    rule_codes.append(rule.code)
    print('Identities(I) address_verifications_i4 rules are created.')
    ds.delete_score_reasons(
        {RULE_MASTER_CODE: I4_RULES_PROFILE_ADDRESS_VERIFICATIONS})
    change_reason = create_new_score_reason(
        I4_RULES_PROFILE_ADDRESS_VERIFICATIONS, rule_codes,
        'تایید نشانی محل سکونت', 'عدم تایید نشانی محل سکونت')
    ds.insert_score_reason(change_reason)
    print('Identities(I) address_verifications_i4 change reasons are created.')


def import_rules_identities(ds: DataService):
    import_rule_identity_master(ds)
    import_rules_identity_has_kycs_i1(ds)
    import_rules_identity_military_service_status_i2(ds)
    import_rules_identity_sim_card_ownerships_i3(ds)
    import_rules_identity_address_verifications_i4(ds)


if __name__ == '__main__':
    import_rules_identities(DataService(get_db()))
Пример #21
0
def import_rules_timeliness_unfixed_returned_cheques_count_of_last_5_years_t32(ds: DataService):
    # define Timeliness(T)' rules of done_arrear_trades_of_last_3_months master: level 2
    rule = create_new_rule(2, 'T', 'T32', 'تعداد کل چک‌های برگشتی رفع سو اثر شده در 5 سال گذشته', 2.59, 20)
    ds.insert_rule(rule)

    # define Timeliness(T)' rules of done_arrear_trades_of_last_3_months details: level 3
    # AllDishonouredCheques = 0	20	T3201P20	کاربر چک برگشتی ندارد
    rule = create_new_rule(3, 'T32', 'T3201P20', 'کاربر چک برگشتی ندارد', 2.59, 20, 0, 0)
    ds.insert_rule(rule)
    rule_codes: List[str] = [rule.code]

    #  1 ≤ AllDishonouredCheques ≤ 3	00	T3202P0	کاربر بین 1 تا 3 چک برگشتی دارد
    rule = create_new_rule(3, 'T32', 'T3202P0', 'کاربر بین 1 تا 3 چک برگشتی دارد', 0, 0, 1, 3)
    ds.insert_rule(rule)
    rule_codes.append(rule.code)

    # 4 <= AllDishonouredCheques ≤ 6	-10	T3203N10	کاربر بین 4 تا 6 چک برگشتی دارد
    rule = create_new_rule(3, 'T32', 'T3203N10', 'کاربر بین 4 تا 6 چک برگشتی دارد', 1.30, -10, 4, 6)
    ds.insert_rule(rule)
    rule_codes.append(rule.code)

    # 7 <= AllDishonouredCheques ≤ 10	-20	T3204N20	کاربر کاربر بین 7 تا 10 چک برگشتی دارد
    rule = create_new_rule(3, 'T32', 'T3204N20', 'کاربر کاربر بین 7 تا 10 چک برگشتی دارد', 2.59, -20, 7, 10)
    ds.insert_rule(rule)
    rule_codes.append(rule.code)

    # DishonouredCheques >= 11	-30	T3205N30	کاربر بیش از 10 چک برگشتی دارد
    rule = create_new_rule(3, 'T32', 'T3205N30', 'کاربر بیش از 10 چک برگشتی دارد', 3.89, -30, 11, rules_max_val)
    ds.insert_rule(rule)
    rule_codes.append(rule.code)
    print('Timeliness(T) unfixed_returned_cheques_count_of_last_5_years_t32 rules are created.')
    ds.delete_score_reasons({RULE_MASTER_CODE: T32_RULES_CHEQUE_UNFIXED_RETURNED_COUNT_OF_LAST_5_YEARS})
    change_reason = create_new_score_reason(T32_RULES_CHEQUE_UNFIXED_RETURNED_COUNT_OF_LAST_5_YEARS, rule_codes, 'کاهش تعداد چک‌های برگشتی رفع سو اثر شده در پنج سال گذشته', 'افزایش تعداد چک‌های برگشتی رفع سو اثر شده در پنج سال گذشته')
    ds.insert_score_reason(change_reason)
    print('Timeliness(T) unfixed_returned_cheques_count_of_last_5_years_t32 change reasons are created.')
from app.core.data.import_history_rules_data import import_rules_histories
from app.core.data.import_identity_rules_data import import_rules_identities
from app.core.data.import_score_gauges_data import import_score_gauges
from app.core.data.import_timeliness_rules_data import import_rules_timeliness
from app.core.data.import_volume_rules_data import import_rules_volumes
from app.core.database import get_db
from app.core.services.data_service import DataService


def import_rules(ds: DataService):
    import_score_gauges(ds)
    import_rules_identities(ds)
    import_rules_histories(ds)
    import_rules_volumes(ds)
    import_rules_timeliness(ds)


if __name__ == '__main__':
    import_rules(DataService(get_db()))
from app.core.models.dtos.cheque_status_dto import ChequesStatusDTO
from app.core.models.dtos.loan_status_dto import LoansStatusDTO
from app.core.models.dtos.score_boundaries_dto import ScoreBoundariesDTO
from app.core.models.dtos.score_change_dto import ScoreChangeDTO
from app.core.models.dtos.score_details_dto import ScoreDetailsDTO
from app.core.models.dtos.score_distribution_dto import ScoreDistributionDTO
from app.core.models.dtos.score_status_dto import ScoreStatusDTO
from app.core.models.dtos.score_time_series_dto import ScoreTimeSeriesDTO
from app.core.models.dtos.user_score_dto import UserScoreDTO
from app.core.models.dtos.vosouq_status_dto import VosouqStatusDTO
from app.core.models.score_gauges import ScoreGauge
from app.core.services.data_service import DataService
from app.core.settings import redis_reset

router = APIRouter()
ds = DataService()
if bool(redis_reset):
    RedisCaching(ds).cache_rules()


# @router.get("/score-gauges", response_model=List[ScoreGauge])
@router.get("/score-gauges", response_model=List[ScoreGauge], responses={200: {"model": ScoreGauge}})
async def get_score_gauges():
    return ds.get_score_gauges()


@router.get("/score-boundaries", response_model=ScoreBoundariesDTO)
async def get_score_boundaries():
    return ds.get_score_boundaries()

Пример #24
0
def import_rules_timeliness_arrear_loans_total_count_t34(ds: DataService):
    # define Timeliness(T)' rules of done_arrear_trades_of_last_3_months master: level 2
    rule = create_new_rule(2, 'T', 'T34', 'تعداد تسهیلات معوق در جریان', 2.59, 20)
    ds.insert_rule(rule)

    # define Timeliness(T)' rules of done_arrear_trades_of_last_3_months details: level 3
    # DelayedLoans = 0	20	T3401P20	کاربر تسهیلات معوق ندارد
    rule = create_new_rule(3, 'T34', 'T3401P20', 'کاربر تسهیلات معوق ندارد', 2.59, 20, 0, 0)
    ds.insert_rule(rule)
    rule_codes: List[str] = [rule.code]

    # DelayedLoans = 1	-10	T3402N10	کاربر 1 تسهیلات معوق دارد
    rule = create_new_rule(3, 'T34', 'T3402N10', 'کاربر 1 تسهیلات معوق دارد', 1.30, -10, 1, 1)
    ds.insert_rule(rule)
    rule_codes.append(rule.code)

    # DelayedLoans = 2	-20	T3403N20	کاربر ۲ تسهیلات معوق دارد
    rule = create_new_rule(3, 'T34', 'T3403N20', 'کاربر ۲ تسهیلات معوق دارد', 2.59, -20, 2, 2)
    ds.insert_rule(rule)
    rule_codes.append(rule.code)

    # DelayedLoans = 3	-30	T3404N30	کاربر ۳ تسهیلات معوق دارد
    rule = create_new_rule(3, 'T34', 'T3404N30', 'کاربر ۳ تسهیلات معوق دارد', 3.89, -30, 3, 3)
    ds.insert_rule(rule)
    rule_codes.append(rule.code)

    # DelayedLoans >= 4	-40	T3405N40	کاربر بیش از ۳ تسهیلات معوق دارد
    rule = create_new_rule(3, 'T34', 'T3405N40', 'کاربر بیش از ۳ تسهیلات معوق دارد', 5.19, -40, 4, rules_max_val)
    ds.insert_rule(rule)
    rule_codes.append(rule.code)
    print('Timeliness(T) arrear_loans_total_count_t34 rules are created.')
    ds.delete_score_reasons({RULE_MASTER_CODE: T34_RULES_LOAN_ARREAR_TOTAL_COUNTS})
    change_reason = create_new_score_reason(T34_RULES_LOAN_ARREAR_TOTAL_COUNTS, rule_codes, 'کاهش تعداد تسهیلات معوق در جریان', 'افزایش تعداد تسهیلات معوق در جریان')
    ds.insert_score_reason(change_reason)
    print('Timeliness(T) arrear_loans_total_count_t34 change reasons are created.')
Пример #25
0
def import_rules_identity_military_service_status_i2(ds: DataService):
    # define Identities(I)' rules of military_service master: level 2
    rule = create_new_rule(2, 'I', 'I2', 'خدمت وظیفه عمومی', 2)
    ds.insert_rule(rule)

    # define Identities(I)' rules of military_service details: level 3
    # MilServiceFinished/Exempted/Ongoing	20  2%	I0201P20	پایان خدمت
    rule = create_new_rule(3, 'I2', 'I0201P20', 'پایان خدمت', 2, 20,
                           ProfileMilitaryServiceStatusEnum.FINISHED.value)
    ds.insert_rule(rule)
    rule_codes: List[str] = [rule.code]

    # MilServiceFinished/Exempted/Ongoing	20  2%	I0202P20	 معافیت
    rule = create_new_rule(3, 'I2', 'I0202P20', 'معافیت', 2, 20,
                           ProfileMilitaryServiceStatusEnum.EXEMPTED.value)
    ds.insert_rule(rule)
    rule_codes.append(rule.code)

    # MilServiceFinished/Exempted/Ongoing	20  2%	I0203P20	در حال خدمت
    rule = create_new_rule(3, 'I2', 'I0203P20', 'در حال خدمت', 2, 20,
                           ProfileMilitaryServiceStatusEnum.ONGOING.value)
    ds.insert_rule(rule)
    rule_codes.append(rule.code)

    # MilServiceSubjected	00	I0204P0     0%	مشمول غیر غایب
    rule = create_new_rule(3, 'I2', 'I0204P0', 'مشمول غیر غایب', 2, 20,
                           ProfileMilitaryServiceStatusEnum.SUBJECTED.value)
    ds.insert_rule(rule)
    rule_codes.append(rule.code)

    # MilServiceAbsent	-50	I0205N50        -5% 	غایب
    rule = create_new_rule(3, 'I2', 'I0205N50', 'غایب', 5, -50,
                           ProfileMilitaryServiceStatusEnum.ABSENT.value)
    ds.insert_rule(rule)
    rule_codes.append(rule.code)
    print('Identities(I) military_service_status_i2 rules are created.')
    ds.delete_score_reasons(
        {RULE_MASTER_CODE: I2_RULES_PROFILE_MILITARY_SERVICE_STATUS})
    change_reason = create_new_score_reason(
        I2_RULES_PROFILE_MILITARY_SERVICE_STATUS, rule_codes,
        'بهبود وضعیت خدمت وظیفه عمومی', 'تنزل وضعیت خدمت وظیفه عمومی')
    ds.insert_score_reason(change_reason)
    print(
        'Identities(I) military_service_status_i2 change reasons are created.')
Пример #26
0
def import_rules_history_done_timely_trades_between_last_3_to_12_months_h7(ds: DataService):
    # define History(H)' rules of done_timely_trades_between_last_3_to_12_months master: level 2
    rule = create_new_rule(2, 'H', 'H7', 'تعداد تعاملات موفق در ۳ تا ۱۲ ماه گذشته', 4.44, 40)
    ds.insert_rule(rule)

    # define History(H)' rules of done_timely_trades_of_last_3_months details: level 3
    # Last1YSD = 0	00	H0701P0	کاربر در یکسال گذشته هیچ تعامل موفقی با سایر کاربران نداشته است
    rule = create_new_rule(3, 'H7', 'H0701P0', 'کاربر در یکسال گذشته هیچ تعامل موفقی با سایر کاربران نداشته است', 0, 0, 0, 0)
    ds.insert_rule(rule)
    rule_codes: List[str] = [rule.code]

    # Last1YSD = 1	05	H0702P05	کاربر در یکسال گذشته 1 تعامل موفق با سایر کاربران داشته است
    rule = create_new_rule(3, 'H7', 'H0702P05', 'کاربر در یکسال گذشته 1 تعامل موفق با سایر کاربران داشته است', 0.56, 5, 1, 1)
    ds.insert_rule(rule)
    rule_codes.append(rule.code)

    # 2 <= Last1YSD ≤ 3	10	H0703P10	کاربر در یکسال گذشته بین 2 تا 3 تعامل موفق با سایر کاربران داشته است
    rule = create_new_rule(3, 'H7', 'H0703P10', 'کاربر در یکسال گذشته بین 2 تا 3 تعامل موفق با سایر کاربران داشته است', 1.11, 10, 2, 3)
    ds.insert_rule(rule)
    rule_codes.append(rule.code)

    # 4 <= Last1YSD ≤ 6	20	H0704P20	کاربر در یکسال گذشته بین 4 تا 6 تعامل موفق با سایر کاربران داشته است
    rule = create_new_rule(3, 'H7', 'H0704P20', 'کاربر در یکسال گذشته بین 4 تا 6 تعامل موفق با سایر کاربران داشته است', 2.22, 20, 4, 6)
    ds.insert_rule(rule)
    rule_codes.append(rule.code)

    # 7 <= Last1YSD ≤ 10	30	H0705P30	کاربر در یکسال گذشته بین 7 تا 10 تعامل موفق با سایر کاربران داشته است
    rule = create_new_rule(3, 'H7', 'H0705P30', 'کاربر در یکسال گذشته بین 7 تا 10 تعامل موفق با سایر کاربران داشته است', 3.33, 30, 7, 10)
    ds.insert_rule(rule)
    rule_codes.append(rule.code)

    # Last1YSD >= 11	40	H0706P40	کاربر در یکسال گذشته بیش از 10 تعامل موفق با سایر کاربران داشته است
    rule = create_new_rule(3, 'H7', 'H0706P40', 'کاربر در یکسال گذشته بیش از 10 تعامل موفق با سایر کاربران داشته است', 4.44, 40, 11,
                           rules_max_val)
    ds.insert_rule(rule)
    rule_codes.append(rule.code)
    print('Histories(H) done_timely_trades_between_last_3_to_12_months_h7 rules are created.')
    ds.delete_score_reasons({RULE_MASTER_CODE: H7_RULES_DONE_TIMELY_TRADES_BETWEEN_LAST_3_TO_12_MONTHS})
    change_reason = create_new_score_reason(H7_RULES_DONE_TIMELY_TRADES_BETWEEN_LAST_3_TO_12_MONTHS, rule_codes, 'افزایش معاملات موفق در یک سال گذشته', 'کاهش معاملات موفق در یک سال گذشته')
    ds.insert_score_reason(change_reason)
    print('Histories(H) done_timely_trades_between_last_3_to_12_months_h7 change reasons are created.')
def calculate_score(scenarios_dicts: [], user_id: int = None):
    # mongoengine_api.launch_app()
    ds = DataService()
    rds = RedisCaching(ds)
    cs = ScoreCalculationService_2(rds, ds)
    # crm = RedisCachingRulesMasters(rds.rds)

    for scn_dict in scenarios_dicts:
        expected_score = scn_dict['Vscore']

        # DoneTrade Score Calculation ..................................................
        dt = DoneTrade(user_id=user_id)
        dt.timely_trades_count_of_last_3_months = scn_dict['Last3MSD']
        dt.timely_trades_count_between_last_3_to_12_months = scn_dict[
            'Last1YSD']
        dt.past_due_trades_count_of_last_3_months = scn_dict[
            'B30DayDelayLast3M']
        dt.past_due_trades_count_between_last_3_to_12_months = scn_dict[
            'B30DayDelayLast3-12M']
        dt.arrear_trades_count_of_last_3_months = scn_dict['A30DayDelayLast3M']
        dt.arrear_trades_count_between_last_3_to_12_months = scn_dict[
            'A30DayDelay3-12M']
        dt.total_delay_days = scn_dict['AverageDelayRatio']
        # todo: 100000000 is fix Denominator that is all_other_users_done_trades_amount, it should be change later
        dt.trades_total_balance = round(
            float(scn_dict['SDealAmountRatio']) *
            ALL_USERS_AVERAGE_DEAL_AMOUNT)
        done_trades_score = cs.calculate_user_done_trades_score_2(
            user_id=0, modified_done_trade=dt)
        ds.delete_done_trades({USER_ID: user_id})
        ds.insert_done_trade(dt)

        # UndoneTrade Score Calculation ..................................................
        udt = UndoneTrade(user_id=user_id)
        udt.undue_trades_count = scn_dict['NumNotDueDeal']
        udt.past_due_trades_count = scn_dict['UnfinishedB30DayDelay']
        udt.arrear_trades_count = scn_dict['UnfinishedA30DayDelay']
        udt.undue_trades_total_balance_of_last_year = round(
            float(scn_dict['NotDueDealAmountRatio']) * dt.trades_total_balance)
        udt.past_due_trades_total_balance_of_last_year = round(
            float(scn_dict['UnfinishedB30Din1YRatio']) *
            dt.trades_total_balance)
        udt.arrear_trades_total_balance_of_last_year = round(
            float(scn_dict['UnfinishedA30Din1YRatio']) *
            dt.trades_total_balance)
        undone_trades_score = cs.calculate_user_undone_trades_score_2(
            user_id=0, undone_trade_object=udt, done_trade_object=dt)
        ds.delete_undone_trades({USER_ID: user_id})
        ds.insert_undone_trade(udt)

        # Loan Score Calculation ..................................................
        ln = Loan(user_id=user_id)
        ln.loans_total_count = scn_dict['Loans']
        ln.loans_total_balance = ALL_USERS_AVERAGE_PRINCIPAL_INTEREST_AMOUNT
        ln.past_due_loans_total_count = int(scn_dict['PastDueLoans'])
        ln.arrear_loans_total_count = int(scn_dict['DelayedLoans'])
        ln.suspicious_loans_total_count = int(
            scn_dict['DoubfulCollectionLoans'])
        ln.monthly_installments_total_balance = float(
            scn_dict['MonthlyInstallments'])
        ln.overdue_loans_total_balance = round(
            float(scn_dict['CurrentLoanAmountRatio']) * ln.loans_total_balance)
        ln.past_due_loans_total_balance = round(
            float(scn_dict['PastDueLoanAmountRatio']) * ln.loans_total_balance)
        ln.arrear_loans_total_balance = round(
            float(scn_dict['DelayedLoanAmountRatio']) * ln.loans_total_balance)
        ln.suspicious_loans_total_balance = round(
            float(scn_dict['DoubtfulCollectionAmountRatio']) *
            ln.loans_total_balance)
        loan_score = cs.calculate_user_loans_score_2(user_id=0, loan_object=ln)
        ds.delete_loans({USER_ID: user_id})
        ds.insert_loan(ln)

        # Cheque Score Calculation ..................................................
        ch = Cheque(user_id=user_id)
        ch.unfixed_returned_cheques_count_of_last_3_months = scn_dict[
            'DishonouredChequesL3M']
        ch.unfixed_returned_cheques_count_between_last_3_to_12_months = scn_dict[
            'DishonouredChequesL3-12M']
        ch.unfixed_returned_cheques_count_of_more_12_months = scn_dict[
            'DishonouredChequesA12M']
        ch.unfixed_returned_cheques_count_of_last_5_years = scn_dict[
            'AllDishonouredCheques']
        ch.unfixed_returned_cheques_total_balance = round(
            float(scn_dict['DCAmountRatio']) *
            ALL_USERS_AVERAGE_UNFIXED_RETURNED_CHEQUES_AMOUNT)
        cheque_score: [] = cs.calculate_user_cheques_score_2(user_id=0,
                                                             cheque_object=ch)
        ds.delete_cheques({USER_ID: user_id})
        ds.insert_cheque(ch)

        # Profile Score Calculation ..................................................
        if user_id is not None:
            ds.delete_profiles({USER_ID: user_id})
        p = Profile(user_id=user_id)
        p.has_kyc = scn_dict['KYC']
        p.military_service_status = ProfileMilitaryServiceStatusEnum.__getitem__(
            scn_dict['Military'])
        p.sim_card_ownership = scn_dict['SimCard']
        p.address_verification = scn_dict['Address']
        p.membership_date = date.today() - timedelta(
            days=int(scn_dict['Membership']))
        p.recommended_to_others_count = scn_dict['Recommendation']
        p.star_count_average = scn_dict['WeightedAveStars']
        profile_score = cs.calculate_user_profile_score_2(user_id=0,
                                                          profile_object=p)

        # total_pure_score = int(profile_score) + int(done_trades_score) + int(undone_trades_score) + int(loan_score) + int(cheque_score)

        identities_pure_score = cs.scores_dict.get(IDENTITIES_SCORE)
        identities_normalized_score = cs.calculate_identities_normalized_score_2(
            identities_pure_score)

        histories_pure_score = cs.scores_dict.get(HISTORIES_SCORE)
        histories_normalized_score = cs.calculate_histories_normalized_score_2(
            histories_pure_score)

        volumes_pure_score = cs.scores_dict.get(VOLUMES_SCORE)
        volumes_normalized_score = cs.calculate_volumes_normalized_score_2(
            volumes_pure_score)

        timeliness_pure_score = cs.scores_dict.get(TIMELINESS_SCORE)
        timeliness_normalized_score = cs.calculate_timeliness_normalized_score_2(
            timeliness_pure_score)

        total_pure_score = identities_pure_score + histories_pure_score + volumes_pure_score + timeliness_pure_score
        total_normalized_score = identities_normalized_score + histories_normalized_score + volumes_normalized_score + timeliness_normalized_score
        print(
            '<><><><><><><> expected-score= {} , total_pure_score = {} and total_normalized_score = {} '
            '<><><><><><><>'.format(expected_score, total_pure_score,
                                    total_normalized_score))

        # Profile Score insertion
        p.score = total_normalized_score
        p.identities_score = identities_normalized_score
        p.histories_score = histories_normalized_score
        p.volumes_score = volumes_normalized_score
        p.timeliness_score = timeliness_normalized_score
        ds.delete_profiles({USER_ID: user_id})
        ds.insert_profile(p)
Пример #28
0
def import_rules_history_recommended_to_others_counts_h8(ds: DataService):
    # define History(H)' rules of recommended_to_others_counts master: level 2
    rule = create_new_rule(2, 'H', 'H8', 'پیشنهاد شدن کاربر به سایرین جهت انجام تعامل پس از انجام موفقیت آمیز تعامل', 4.44, 40)
    ds.insert_rule(rule)

    # define History(H)' rules of recommended_to_others_counts details: level 3
    # Recommendation = 0	00	H0801P0	کاربر توسط کسی پیشنهاد نشده است
    rule = create_new_rule(3, 'H8', 'H0801P0', 'کاربر توسط کسی پیشنهاد نشده است', 0, 0, 0, 0)
    ds.insert_rule(rule)
    rule_codes: List[str] = [rule.code]

    # Recommendation = 1	10	H0802P10	پیشنهاد شده توسط 1 نفر
    rule = create_new_rule(3, 'H8', 'H0802P10', 'پیشنهاد شده توسط 1 نفر', 1.11, 10, 1, 1)
    ds.insert_rule(rule)
    rule_codes.append(rule.code)

    # 2 < Recommendation ≤ 3	20	H0803P20	پیشنهاد شده توسط 2 تا 3 نفر
    rule = create_new_rule(3, 'H8', 'H0803P20', 'پیشنهاد شده توسط 2 تا 3 نفر', 2.22, 20, 2, 3)
    ds.insert_rule(rule)
    rule_codes.append(rule.code)

    # 4 < Recommendation ≤ 10	30	H0804P30	پیشنهاد شده توسط 4 تا 10 نفر
    rule = create_new_rule(3, 'H8', 'H0804P30', 'پیشنهاد شده توسط 4 تا 10 نفر', 3.33, 30, 4, 10)
    ds.insert_rule(rule)
    rule_codes.append(rule.code)

    # 11 < Recommendation ≤ 30	40	H0805P40	پیشنهاد شده توسط 11 تا 30 نفر
    rule = create_new_rule(3, 'H8', 'H0805P40', 'پیشنهاد شده توسط 11 تا 30 نفر', 4.44, 40, 11, 30)
    ds.insert_rule(rule)
    rule_codes.append(rule.code)

    # Recommendation > 30	50	H0806P50	پیشنهاد شده توسط بیش از 30 نفر
    rule = create_new_rule(3, 'H8', 'H0806P50', 'پیشنهاد شده توسط بیش از 30 نفر', 5.56, 50, 30, rules_max_val)
    ds.insert_rule(rule)
    rule_codes.append(rule.code)
    print('Histories(H) recommended_to_others_counts_h8 rules are created.')
    ds.delete_score_reasons({RULE_MASTER_CODE: H8_RULES_PROFILE_RECOMMENDED_TO_OTHERS_COUNTS})
    change_reason = create_new_score_reason(H8_RULES_PROFILE_RECOMMENDED_TO_OTHERS_COUNTS, rule_codes, 'افزایش پیشنهادات طرفین معاملات به سایرین جهت انجام معامله با شما', 'کاهش پیشنهادات طرفین معاملات به سایرین جهت انجام معامله با شما')
    ds.insert_score_reason(change_reason)
    print('Histories(H) recommended_to_others_counts_h8 change reasons are created.')
import random
from datetime import date

from app.core.database import get_db
from app.core.models.profile import Profile
from app.core.models.scoring_enums import ProfileMilitaryServiceStatusEnum
from app.core.services.data_service import DataService

if __name__ == '__main__':
    ds = DataService(get_db())
    ds.delete_profiles({})
    for i in range(2):
        p = Profile(user_id=int(100 + i))
        p.has_kyc = 1
        p.military_service_status = ProfileMilitaryServiceStatusEnum.FINISHED
        p.sim_card_ownership = 1
        p.address_verification = 1
        p.membership_date = date.today()
        p.recommended_to_others_count = 23
        p.star_count_average = 1

        p.identities_score = random.randint(0, 100)  # 10%
        p.histories_score = random.randint(0, 300)  # 30%
        p.volumes_score = random.randint(0, 250)  # 25%
        p.timeliness_score = random.randint(0, 350)  # 35%
        p.score = p.identities_score + p.histories_score + p.volumes_score + p.timeliness_score
        ds.insert_profile(p)

        # Test aggregation pipeline run performance
        # pipeline = generate_scores_distributions_pipeline(0, 1000, 20)
        # ref: CommandCursor = ds.db.profiles.aggregate(pipeline)
Пример #30
0
def import_rules_history_star_counts_avgs_h9(ds: DataService):
    # define History(H)' rules of star_counts_avgs master: level 2
    rule = create_new_rule(2, 'H', 'H9', ' امتیاز رضایتمندی دریافت شده از طرف مقابل پس از انجام موفقیت آمیز تعامل', 5.56, 50)
    ds.insert_rule(rule)

    # define History(H)' rules of star_counts_avgs details: level 3
    # WeightedAveStars <= 1	00	H0901P0	کاربر به طور متوسط کمتر مساوی ۱ ستاره کسب کرده است
    rule = create_new_rule(3, 'H9', 'H0901P0', 'کاربر به طور متوسط کمتر مساوی ۱ ستاره کسب کرده است', 0, 0, 0, 1)
    ds.insert_rule(rule)
    rule_codes: List[str] = [rule.code]

    # 1.001 <= WeightedAveStars ≤ 2	05	H0902P5	کاربر به طور متوسط بیش از ۱ و کمتر مساوی ۲ ستاره کسب کرده است
    rule = create_new_rule(3, 'H9', 'H0902P5', 'کاربر به طور متوسط بیش از ۱ و کمتر مساوی ۲ ستاره کسب کرده است', 0.56, 5, 1.001, 2)
    ds.insert_rule(rule)
    rule_codes.append(rule.code)

    # 2.001 <= WeightedAveStars ≤ 3	10	H0903P10	کاربر به طور متوسط بیش از ۲ و کمتر مساوی ۳ ستاره کسب کرده است
    rule = create_new_rule(3, 'H9', 'H0903P10', 'کاربر به طور متوسط بیش از ۲ و کمتر مساوی ۳ ستاره کسب کرده است', 1.11, 10, 2.001, 3)
    ds.insert_rule(rule)
    rule_codes.append(rule.code)

    # 3.001 <= WeightedAveStars ≤ 4	30	H0904P30	کاربر به طور متوسط بیش از ۳ و کمتر مساوی ۴ ستاره کسب کرده است
    rule = create_new_rule(3, 'H9', 'H0904P30', 'کاربر به طور متوسط بیش از ۳ و کمتر مساوی ۴ ستاره کسب کرده است', 3.33, 30, 3.001, 4)
    ds.insert_rule(rule)
    rule_codes.append(rule.code)

    # 4.001 <= WeightedAveStars ≤ 5	50	H0905P50	کاربر به طور متوسط بیش از ۴ و کمتر مساوی ۵ ستاره کسب کرده است
    rule = create_new_rule(3, 'H9', 'H0905P50', 'کاربر به طور متوسط بیش از ۴ و کمتر مساوی ۵ ستاره کسب کرده است', 5.56, 50, 4.001, 5)
    ds.insert_rule(rule)
    rule_codes.append(rule.code)
    print('Histories(H) star_counts_avgs_h9 rules are created.')
    ds.delete_score_reasons({RULE_MASTER_CODE: H9_RULES_PROFILE_STAR_COUNTS_AVGS})
    change_reason = create_new_score_reason(H9_RULES_PROFILE_STAR_COUNTS_AVGS, rule_codes, 'افزایش امتیاز رضایتمندی دریافت شده از طرفین معاملات', 'کاهش امتیاز رضایتمندی دریافت شده از طرفین معاملات')
    ds.insert_score_reason(change_reason)
    print('Histories(H) star_counts_avgs_h9 change reasons are created.')