from marshmallow import Schema, fields, validate # Schema for the fees details object class FeesDetailsSchema(Schema): collectAmountInterest = fields.Float(required=True, description="Interest Amount to be collected immediately after loan is provided (Only for 30 days)") collectAmountMgtFee = fields.Float(required=True, description="Management Fee Amount to be collected immediately after loan is provided") collectAmountInsurance = fields.Float(required=True, description="Insurance Amount to be collected immediately after loan is provided") collectAmountVAT = fields.Float(required=True, description="VAT Amount to be collected immediately after loan is provided") # Disbursement Request Schema class DisbursementSchema(Schema): requestId = fields.Str(required=True, description="Unique identifier of request") countryCode = fields.Str(required=True, description="Unique country code. Please refer to Country Codes table") transactionId = fields.Str(required=True, description="Unique identifier of transaction in Simbrella system") debtId = fields.Str(required=True, description="Unique identifier of a loan in Simbrella system that is going to be collected (it correlates with provision request)") customerId = fields.Str(required=True, description="Unique identifier of a user") accountId = fields.Str(required=True, description="Specific identifier of a user's account") productId = fields.Str(required=True, description="Identifier of a product to be provided to a user") provideAmount = fields.Float(required=True, description="Amount of loan (including service fee) to be provided on a specific account of a user") totalFees = fields.Float(required=True, description="Total amount of all fees combined") feesDetails = fields.Nested(FeesDetailsSchema, required=True, description="Detailed breakdown of all fees") countryId = fields.Str(required=True, description="Set to static value '01'") comment = fields.Str(required=False, description="Any additional comment for provided loan operation") # Disbursement Response Schema class DisbursementResponseSchema(Schema): requestId = fields.Str(required=True, description="Unique identifier of request") countryCode = fields.Str(required=True, description="Unique country code.") transactionId = fields.Str(required=True, description="Unique ID of customer's USSD session. Must be consistent throughout whole USSD journey") debtId = fields.Str(required=True, description="Unique identifier of a loan in Simbrella system that is going to be collected (it correlates with provision request)") customerId = fields.Str(required=True, description="Unique identifier of a user") accountId = fields.Str(required=True, description="Specific identifier of a user's account") productId = fields.Str(required=True, description="Identifier of a product to be provided to a user") provideAmount = fields.Float(required=True, description="Amount of loan (including service fee) to be provided on a specific account of a user") totalFees = fields.Float(required=True, description="Total amount of all fees combined") feesDetails = fields.Nested(FeesDetailsSchema, required=True, description="Detailed breakdown of all fees") 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")