"""Schemas for Ledger Reserve Release Schedule serialization.""" from abacus_common_logic.marshalling.custom_fields import ma class LedgerReserveReleaseSchedulePostSchema(ma.Schema): """Ledger Reserve Release Schedule POST schema.""" abacus_event_id = ma.NonNegativeInteger(required=True) account_id = ma.NonNegativeInteger(required=True) taken_statement_period_id = ma.NonNegativeInteger(required=True) release_statement_period_id = ma.NonNegativeInteger(required=True) ledger_reserve_taken_id = ma.NonNegativeInteger(required=True) currency_code = ma.NonemptyString() installment_amount = ma.Decimal(as_string=True) outstanding_amount_after_installment = ma.Decimal(as_string=True) early_release_date = ma.FormattedDateTime(allow_none=True) class LedgerReserveReleaseScheduleDetailSchema(LedgerReserveReleaseSchedulePostSchema): """Ledger Reserve Release Schedule Detail schema.""" ledger_reserve_release_schedule_id = ma.NonNegativeInteger(required=True) class LedgerReserveReleaseScheduleExtendedSchema( LedgerReserveReleaseScheduleDetailSchema ): """Ledger Reserve Release Schedule schema for getting items by statement period. Contains all fields from Detail schema and `contract_id` in addition """ contract_id = ma.NonNegativeInteger(required=True)