from marshmallow import Schema, fields, validate # Repayment Request Schema class RepaymentSchema(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 for which collection to be made") collectedAmount = fields.Float(required=True, description="Amount to be collected from user's account (penalCharge is not included)") penalCharge = fields.Float(required=False, description="Amount of penalty to be collected from user's account. If there is no penalty, amount is '0'") collectionMethod = fields.Int(required=True, description="1 - on deposit of salary, 2 - on due date, 3 - initiated by user", validate=validate.OneOf([1, 2, 3])) lienAmount = fields.Float(required=True, description="Aggregated (summed up) lien amount") comment = fields.Str(required=False, description="Any additional comment for provided loan operation") # Repayment Response Schema class RepaymentResponseSchema(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 for which collection to be made") collectedAmount = fields.Float(required=True, description="Amount to be collected from user's account (penalCharge is not included)") penalCharge = fields.Float(required=False, description="Amount of penalty to be collected from user's account. If there is no penalty, amount is '0'") lienAmount = fields.Float(required=True, description="Aggregated (summed up) lien amount") comment = fields.Str(required=False, description="Any additional comment for provided loan operation") 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")