"""Schemas for ledger_vat_summary serialization.""" from abacus_common_logic.marshalling.custom_fields import ma from marshmallow import validate from ledger.constants.constants import VAT_CATEGORIES class LedgerVatSummarySchema(ma.Schema): """Base schema for shared ledger_vat_summary columns.""" activity_statement_period_id = ma.NonNegativeInteger(required=False) account_id = ma.NonNegativeInteger(required=True) contract_id = ma.NonNegativeInteger(required=True) vat_category = ma.Enum(options=VAT_CATEGORIES, required=True) payee_currency_code = ma.NonemptyString( required=True, validate=[validate.Length(equal=3)] ) vat_currency_code = ma.NonemptyString( required=True, validate=[validate.Length(equal=3)] ) base_amount_payee_currency = ma.Decimal(as_string=True, required=True) vat_rate = ma.Decimal(as_string=True, allow_none=True) vat_amount_payee_currency = ma.Decimal(as_string=True, allow_none=True) vat_amount_vat_currency = ma.Decimal(as_string=True, allow_none=True) net_amount_payee_currency = ma.Decimal(as_string=True, required=True) wht_rate = ma.Decimal(as_string=True, allow_none=True, required=False) wht_amount_vat_currency = ma.Decimal( as_string=True, allow_none=True, required=False ) wht_amount_payee_currency = ma.Decimal( as_string=True, allow_none=True, required=False ) abacus_exempt_reason = ma.String( required=False, allow_none=True, validate=[validate.Length(equal=120)] ) description = ma.String( required=False, allow_none=True, validate=[validate.Length(max=255)] ) class LedgerVatSummaryDetailSchema(LedgerVatSummarySchema): """Detail schema for ledger_vat_summary.""" ledger_vat_summary_id = ma.NonNegativeInteger(required=True) statement_period_id = ma.NonNegativeInteger(required=True) abacus_event_id = ma.NonNegativeInteger(required=True)