from marshmallow import Schema, fields, validate # CollectLoan Request Schema class CollectLoanSchema(Schema): transactionId = fields.Str(required=True, description="Unique identifier of transaction in Simbrella system") fbnTransactionId = fields.Str(required=True, description="Unique id of the transaction received from FBN in Eligibility or Provision requests") 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") collectAmount = 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") countryId = fields.Str(required=True, description="Set to static value '01'") comment = fields.Str(required=False, description="Any additional comment for provided loan operation") # CollectLoan Response Schema class CollectLoanResponseSchema(Schema): 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") collectAmount = fields.Float(required=True, description="Amount collected from user's account (penalCharge is not included)") penalCharge = fields.Float(required=True, description="Amount of penalty collected from user's account. If there is no penalty, amount is '0'") lienAmount = fields.Float(required=True, description="Aggregated (summed up) lien amount") countryId = fields.Str(required=False, description="Set to static value '01'") 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")