from marshmallow import Schema, fields, validate # ProvideLoan Request Schema class ProvideLoanSchema(Schema): requestId = fields.Str(required=False, description="Unique identifier of request") transactionId = fields.Str(required=True, description="Unique identifier of transaction. This transaction Id must be consistent across all platforms") customerId = fields.Str(required=True, description="Unique identifier of a customer") accountId = fields.Str(required=True, description="Specific identifier of a user's account") msisdn = fields.Str(required=False, description="User's mobile number in an international format") productId = fields.Str(required=True, description="Identifier of a product chosen by user") requestedAmount = fields.Float(required=True, description="Amount of loan that requested by user") collectionType = fields.Int(required=True, description="Type of collection that user is preferred. 0 – as soon as salary inflow occurs; 1- as soon as any new inflow occurs, 1 – collection after XX days.", validate=validate.OneOf([0, 1])) offerId = fields.Int(required=True, description="Offer ID of the loan selected by Customer") channel = fields.Str(required=True, description="Request channel: 'USSD' or 'MobileApp' or 'Web' - Reference Channel types", validate=validate.OneOf(["USSD", "MobileApp", "Web", "100", "101", "102", "103"])) # Added numeric channel codes # ProvideLoan Response Schema class ProvideLoanResponseSchema(Schema): requestId = fields.Str(required=True, description="Unique identifier of request") transactionId = fields.Str(required=True, description="Unique identifier of transaction. This transaction Id must be consistent across all platforms") customerId = fields.Str(required=True, description="Unique identifier of a customer") accountId = fields.Str(required=True, description="Specific identifier of a user's account") msisdn = fields.Str(required=False, description="User's mobile number in an international format") resultCode = fields.Str(required=True, description="Result code of executed transaction, e.g. (00 – Success etc.) see result codes table") resultDescription = fields.Str(required=True, description="Description of provided result code")