Source code for aeat.application.ledger._rule_repository
"""Profile-scoped encrypted repository for ledger classification rules.:class:`LedgerClassificationRule` records are stored through:class:`~aeat.adapters.persistence.storage.SecureBoundRepository` at the:class:`~aeat.adapters.persistence.storage.SensitivityClass` declared by:data:`aeat.adapters.persistence.storage.LEDGER_CLASSIFICATION_RULES_NAMESPACE`.The bound repository serialises each rule through an:class:`~aeat.adapters.persistence.storage.Envelope`, so the stored rulepattern, actor, category, and classification stay encrypted at rest.See Also: :class:`LedgerClassificationRule` Content-addressed payload model persisted by this repository. :func:`aeat.application.ledger.add_classification_rule` Application entry point that creates and saves a rule. :func:`aeat.application.ledger.apply_classification_rules` Application entry point that evaluates persisted rules over active ledger transactions."""from__future__importannotationsfromtypingimportClassVar,overridefrompydanticimportBaseModelfrom...adapters.persistence.storageimport(LEDGER_CLASSIFICATION_RULES_NAMESPACE,SecureBoundRepository,SensitivityClass,)from...domain.transactionsimportLedgerClassificationRule
[docs]classLedgerClassificationRuleRepository(SecureBoundRepository[LedgerClassificationRule]):"""Encrypted profile-local store of :class:`LedgerClassificationRule` payloads. The namespace, sensitivity, schema version, and object-key contract come from :data:`aeat.adapters.persistence.storage.LEDGER_CLASSIFICATION_RULES_NAMESPACE`. Rules are sorted by ``(priority, created_at)`` ascending so that lower-priority-number rules (higher precedence) are evaluated first. Among same-priority rules the earliest-created rule wins. """namespace:ClassVar[str]=LEDGER_CLASSIFICATION_RULES_NAMESPACE.namespacesensitivity:ClassVar[SensitivityClass]=LEDGER_CLASSIFICATION_RULES_NAMESPACE.sensitivityschema_version:ClassVar[int]=LEDGER_CLASSIFICATION_RULES_NAMESPACE.schema_versionpayload_type:ClassVar[type[BaseModel]]=LedgerClassificationRule
[docs]deflist_rules(self)->tuple[LedgerClassificationRule,...]:"""Return all stored rules in application order: (priority asc, created_at asc). Each element is a :class:`LedgerClassificationRule`. """returntuple(sorted(self.iter_records(),key=lambdar:(r.priority,r.created_at)))