diff --git a/app/api/schemas/rac_check.py b/app/api/schemas/rac_check.py index 9f60795..dc0fd7f 100644 --- a/app/api/schemas/rac_check.py +++ b/app/api/schemas/rac_check.py @@ -1,15 +1,44 @@ from marshmallow import Schema, fields +from marshmallow import Schema, fields +from datetime import date + class RACItemSchema(Schema): - hasSalaryAccount = fields.Bool(required=True) - bvnValidated = fields.Bool(required=True) - creditBureauCheck = fields.Bool(required=True) - crmsCheck = fields.Bool(required=True) - accountStatus = fields.Bool(required=True) - hasLien = fields.Bool(required=True) - noBouncedCheck = fields.Bool(required=True) - isWhitelisted = fields.Bool(required=True) - hasPastDueLoan = fields.Bool(required=True) + PROCESS_DATE = fields.Date(required=True, default=date.today) + CIF_ID = fields.Str(required=True) + CUSTOMER_id = fields.Str(required=True) + SALACCT_1 = fields.Str(required=True) + ALERT_PHONE = fields.Str(required=True) + AVERAGE_SALARY = fields.Decimal(required=True, as_string=True) + LOAN_OUSTANDING_BAL = fields.Decimal(required=True, as_string=True) + EMI = fields.Decimal(required=True, as_string=True) + ELIG_AMT = fields.Decimal(required=True, as_string=True) + + rule1_45day_sal = fields.Bool(required=True) + rule2_2m_sal = fields.Bool(required=True) + rule3_no_bounced_check = fields.Bool(required=True) + rule4_current_loan_payments = fields.Bool(required=True) + rule5_no_past_due_fadv_loan = fields.Bool(required=True) + rule6_no_past_due_other_loan = fields.Bool(required=True) + rule7_consistent_salary_amount = fields.Bool(required=True) + rule8_whitelisted = fields.Bool(required=True) + rule9_regular_account = fields.Bool(required=True) + rule10_bvn_validation = fields.Bool(required=True) + rule11_CRC_no_delinquency = fields.Bool(required=True) + rule12_CRMS_no_delinquency = fields.Bool(required=True) + rule13_BVN_ignore = fields.Bool(required=True) + rule14_no_lien = fields.Bool(required=True) + rule15_null_ignore = fields.Bool(required=True) + + OVERALL_ELIG = fields.Bool(required=True) + + SALARYPAYMENT_1 = fields.Decimal(required=True, as_string=True) + SALARYPAYMENT_2 = fields.Decimal(required=True, as_string=True) + SALARYPAYMENT_3 = fields.Decimal(required=True, as_string=True) + SALARYPAYMENT_4 = fields.Decimal(required=True, as_string=True) + SALARYPAYMENT_5 = fields.Decimal(required=True, as_string=True) + SALARYPAYMENT_6 = fields.Decimal(required=True, as_string=True) + # RAC Check Schema class RACCheckSchema(Schema): diff --git a/app/api/services/rac_check.py b/app/api/services/rac_check.py index df4c7eb..9990291 100644 --- a/app/api/services/rac_check.py +++ b/app/api/services/rac_check.py @@ -3,6 +3,8 @@ from marshmallow import ValidationError from app.utils.logger import logger from app.api.helpers.response_helper import ResponseHelper from app.api.schemas.rac_check import RACCheckSchema, RACCheckResponseSchema +from datetime import datetime +from decimal import Decimal class RACCheckService: @staticmethod @@ -24,18 +26,53 @@ class RACCheckService: validated_data = schema.load(data) # Simulated RAC check logic — create racResponse manually or via logic + # rac_response = { + # "hasSalaryAccount": True, + # "bvnValidated": True, + # "creditBureauCheck": False, + # "crmsCheck": True, + # "accountStatus": True, + # "hasLien": False, + # "noBouncedCheck": True, + # "isWhitelisted": True, + # "hasPastDueLoan": False + # } + rac_response = { - "hasSalaryAccount": True, - "bvnValidated": True, - "creditBureauCheck": False, - "crmsCheck": True, - "accountStatus": True, - "hasLien": False, - "noBouncedCheck": True, - "isWhitelisted": True, - "hasPastDueLoan": False + "PROCESS_DATE": datetime.strptime("2025-06-05", "%Y-%m-%d").date(), + "CIF_ID": "123456789", + "CUSTOMER_id": "987654321", + "SALACCT_1": "34567831", + "ALERT_PHONE": "2348031234567", + "AVERAGE_SALARY": Decimal("50000"), + "LOAN_OUSTANDING_BAL": Decimal("0"), + "EMI": Decimal("10000"), + "ELIG_AMT": Decimal("25000"), + "rule1-45day-sal": True, + "rule2-2m-sal": True, + "rule3-no-bounced-check": True, + "rule4-current-loan-payments": True, + "rule5-no-past-due-fadv-loan": True, + "rule6--no-past-due-other-loan": True, + "rule7-consistent-salary-amount": True, + "rule8-whitelisted": True, + "rule9-regular-account": True, + "rule10-bvn-validation": True, + "rule11-CRC-no-delinquency": True, + "rule12-CRMS-no-delinquency": True, + "rule13-BVN-ignore": True, + "rule14-no-lien": True, + "rule15-null-ignore": True, + "OVERALL_ELIG": True, + "SALARYPAYMENT_1": Decimal("50000"), + "SALARYPAYMENT_2": Decimal("50000"), + "SALARYPAYMENT_3": Decimal("50000"), + "SALARYPAYMENT_4": Decimal("50000"), + "SALARYPAYMENT_5": Decimal("50000"), + "SALARYPAYMENT_6": Decimal("50000") } + full_response = { "transactionId": validated_data["transactionId"], "customerId": validated_data["customerId"], @@ -43,8 +80,8 @@ class RACCheckService: "racResponse": rac_response } - response_schema = RACCheckResponseSchema() - result = response_schema.dump(full_response) + # response_schema = RACCheckResponseSchema() + result = full_response return jsonify(result), 200 diff --git a/app/swagger/schemas/RACCheckResponse.json b/app/swagger/schemas/RACCheckResponse.json index 9e7e291..7b19d63 100644 --- a/app/swagger/schemas/RACCheckResponse.json +++ b/app/swagger/schemas/RACCheckResponse.json @@ -16,42 +16,69 @@ "racResponse": { "type": "object", "properties": { - "hasSalaryAccount": { - "type": "boolean", - "example": true + "PROCESS_DATE": { + "type": "string", + "format": "date", + "example": "2025-06-05" }, - "bvnValidated": { - "type": "boolean", - "example": true + "CIF_ID": { + "type": "string", + "example": "123456789" }, - "creditBureauCheck": { - "type": "boolean", - "example": true + "CUSTOMER_id": { + "type": "string", + "example": "987654321" }, - "crmsCheck": { - "type": "boolean", - "example": true + "SALACCT_1": { + "type": "string", + "example": "34567831" }, - "accountStatus": { - "type": "boolean", - "example": true + "ALERT_PHONE": { + "type": "string", + "example": "2348031234567" }, - "hasLien": { - "type": "boolean", - "example": true + "AVERAGE_SALARY": { + "type": "number", + "format": "decimal", + "example": 50000 }, - "noBouncedCheck": { - "type": "boolean", - "example": true + "LOAN_OUSTANDING_BAL": { + "type": "number", + "format": "decimal", + "example": 0 }, - "isWhitelisted": { - "type": "boolean", - "example": true + "EMI": { + "type": "number", + "format": "decimal", + "example": 10000 }, - "hasPastDueLoan": { - "type": "boolean", - "example": true - } + "ELIG_AMT": { + "type": "number", + "format": "decimal", + "example": 25000 + }, + "rule1-45day-sal": { "type": "boolean", "example": true }, + "rule2-2m-sal": { "type": "boolean", "example": true }, + "rule3-no-bounced-check": { "type": "boolean", "example": true }, + "rule4-current-loan-payments": { "type": "boolean", "example": true }, + "rule5-no-past-due-fadv-loan": { "type": "boolean", "example": true }, + "rule6--no-past-due-other-loan": { "type": "boolean", "example": true }, + "rule7-consistent-salary-amount": { "type": "boolean", "example": true }, + "rule8-whitelisted": { "type": "boolean", "example": true }, + "rule9-regular-account": { "type": "boolean", "example": true }, + "rule10-bvn-validation": { "type": "boolean", "example": true }, + "rule11-CRC-no-delinquency": { "type": "boolean", "example": true }, + "rule12-CRMS-no-delinquency": { "type": "boolean", "example": true }, + "rule13-BVN-ignore": { "type": "boolean", "example": true }, + "rule14-no-lien": { "type": "boolean", "example": true }, + "rule15-null-ignore": { "type": "boolean", "example": true }, + "OVERALL_ELIG": { "type": "boolean", "example": true }, + "SALARYPAYMENT_1": { "type": "number", "format": "decimal", "example": 50000 }, + "SALARYPAYMENT_2": { "type": "number", "format": "decimal", "example": 50000 }, + "SALARYPAYMENT_3": { "type": "number", "format": "decimal", "example": 50000 }, + "SALARYPAYMENT_4": { "type": "number", "format": "decimal", "example": 50000 }, + "SALARYPAYMENT_5": { "type": "number", "format": "decimal", "example": 50000 }, + "SALARYPAYMENT_6": { "type": "number", "format": "decimal", "example": 50000 } } } },