aeat.domain.transactions package¶
Public facade for immutable ledger transactions.
This package re-exports the transaction domain boundary used by
ledger: Transaction wraps an upstream
RawTransaction and its RawProvenance, while
TransactionCatalogue keeps the immutable mapping keyed by the
content-derived transaction id. Import helpers such as
derive_transaction_id(),
derive_import_fingerprint(), and
normalise_movement_reference() are the public identity helpers.
The row model separates amount magnitude from
TransactionDirection; downstream tax calculations route by direction
rather than by signed amounts. It carries classification, tax substrate,
evidence, split, edit, lifecycle, FX, jurisdiction, and timestamp provenance
through typed records such as ClassificationHistoryEntry,
TransactionEvidenceProvenanceEntry,
TransactionEditLineageEntry, and
TransactionLifecycleLineageEntry. Classification helpers
set_classification(),
snapshot_classification_state(), and
link_invoice() return fresh catalogues instead of mutating callers’
instances.
Persistence is served by the read-side
TransactionCatalogueRepositoryProtocol port; the concrete encrypted
implementation lives in the persistence adapter
TransactionCatalogueRepository.
It stores each transaction under the bucket-scoped transaction namespace as
FINANCIAL SensitivityClass rows wrapped in
Envelope through
SecureObjectRepository; callers should
not write plaintext catalogues or reach into private modules. The pure port
surface (ImportSummary, the key-derivation helpers, and the namespace
constant) remains exposed lazily here.
LLM-facing LLMClassifier,
LLMSplitProposer,
PromptSpec,
LedgerClassificationRule, and
ledger_irpf_category_catalogue() also live behind
this facade. They constrain model choices to typed
BusinessClassification,
CategoryChoice, and
IvaCategoryChoice allow-lists; regulated tax
numbers are derived by application services, not originated by this package.
Downstream modelo calculation records keep only forward transaction ids on
CalculationRevision. Aggregation services consume
this catalogue to produce registry binding values and ledger filing snapshots,
while TransactionRevisionParticipationIndex
provides the rebuildable inverse audit lookup from one ledger transaction to
finalized revisions and filing records.
See also
ledgerOperator-facing lifecycle that creates, edits, classifies, splits, attaches evidence, and preflights bucket-scoped transactions.
aggregationSource resolvers that turn transaction catalogues into
CalculationSourceResolutionpayloads for modelo calculation.compute_ledger_filing_snapshot()Captures tax-relevant transaction fields for finalized calculation revisions.
invoicesInvoice catalogue and reconciliation records referenced by
invoice_idandpurchase_invoice_evidence_id.usage_ratiosProportionality profiles referenced by ledger rows before aggregation.
2026-06-10-ledger-amount-direction-adrDecision making amount magnitude absolute and direction authoritative.
2026-06-10-ledger-modelo-crossref-adrDecision for the rebuildable transaction participation index.
Submodules¶
- aeat.domain.transactions._classification_rule module
LedgerClassificationRuleLedgerClassificationRule.rule_idLedgerClassificationRule.description_patternLedgerClassificationRule.classificationLedgerClassificationRule.category_idLedgerClassificationRule.priorityLedgerClassificationRule.created_atLedgerClassificationRule.actorLedgerClassificationRule.create()LedgerClassificationRule.matches()
- aeat.domain.transactions._enums module
TransactionDirectionBusinessClassificationBusinessClassification.BUSINESSBusinessClassification.PERSONALBusinessClassification.MIXEDBusinessClassification.NOT_YET_PROCESSEDBusinessClassification.PROCESSED_UNCLASSIFIEDBusinessClassification.SKIPPED_BY_RULEBusinessClassification.FAILED_VALIDATIONBusinessClassification.REVIEWED_EXCLUDED
TransactionLifecycleStateSplitRoleCLASSIFIED_STATESis_classified()
- aeat.domain.transactions._errors module
TransactionErrorTransactionCatalogueErrorTransactionPersistenceErrorStoredTransactionDriftErrorLedgerStorageErrorLedgerNoActiveBucketErrorTransactionNotFoundErrorTransactionIdPrefixErrorLLMClassifierErrorTransactionValidationErrorLedgerLinkErrorLedgerCheckErrorLedgerPreflightErrorClassificationRuleError
- aeat.domain.transactions._ids module
- aeat.domain.transactions._irpf_categories module
- aeat.domain.transactions._llm module
LLMClassificationResponseLLMSplitChildLLMSplitResponseLLMClassifierLLMSplitProposerClassificationChoiceCategoryChoiceIvaCategoryChoicedefault_classification_choices()PromptSpecdefault_prompt_spec()prompt_spec_with_every_spending_category()default_iva_category_choices()prompt_spec_with_saturation_fields()parse_response()build_split_prompt()parse_split_response()SubprocessLLMClassifierSubprocessLLMClassifier.nameSubprocessLLMClassifier.commandSubprocessLLMClassifier.modelSubprocessLLMClassifier.timeout_secondsSubprocessLLMClassifier.specSubprocessLLMClassifier.prompt_via_argumentSubprocessLLMClassifier.decided_bySubprocessLLMClassifier.classify()SubprocessLLMClassifier.propose_split()
build_claude_classifier()build_antigravity_classifier()build_codex_classifier()resolve_classifier()resolve_split_proposer()register_classifier()unregister_classifier()
- aeat.domain.transactions._model_tier module
- aeat.domain.transactions._model_validation module
- aeat.domain.transactions._models module
derive_transaction_id()normalise_movement_reference()derive_import_fingerprint()derive_movement_day_key()DecisionProvenanceClassificationHistoryEntryClassificationHistoryEntry.business_classificationClassificationHistoryEntry.business_pctClassificationHistoryEntry.classified_atClassificationHistoryEntry.classified_byClassificationHistoryEntry.reasonClassificationHistoryEntry.category_idClassificationHistoryEntry.notesClassificationHistoryEntry.confidenceClassificationHistoryEntry.provenance
TransactionEvidenceProvenanceEntryTransactionEditLineageEntryTransactionLifecycleLineageEntryTransactionLifecycleLineageEntry.previous_stateTransactionLifecycleLineageEntry.stateTransactionLifecycleLineageEntry.actorTransactionLifecycleLineageEntry.source_commandTransactionLifecycleLineageEntry.changed_atTransactionLifecycleLineageEntry.reasonTransactionLifecycleLineageEntry.bucket_event_id
SplitLineagederive_split_group_id()TransactionTransaction.rawTransaction.transaction_idTransaction.directionTransaction.business_classificationTransaction.business_pctTransaction.invoice_idTransaction.category_idTransaction.taxable_baseTransaction.iva_rateTransaction.iva_amountTransaction.recargo_amountTransaction.irpf_categoryTransaction.usage_ratio_idTransaction.prorrata_referenceTransaction.art_104_tres_exclusionTransaction.input_classificationTransaction.prorrata_sector_idTransaction.purchase_invoice_evidence_idTransaction.attachment_idsTransaction.created_byTransaction.source_commandTransaction.created_event_idTransaction.evidence_provenanceTransaction.edit_lineageTransaction.lifecycle_stateTransaction.lifecycle_lineageTransaction.split_lineageTransaction.notesTransaction.import_fingerprintTransaction.classified_atTransaction.classified_byTransaction.classification_reasonTransaction.classification_confidenceTransaction.classification_historyTransaction.iva_categoryTransaction.exemption_articleTransaction.counterparty_eu_member_stateTransaction.cash_accounting_treatmentTransaction.cash_accounting_operation_dateTransaction.cash_accounting_payment_evidenceTransaction.fx_rateTransaction.value_in_eurTransaction.rate_sourceTransaction.rate_dateTransaction.source_jurisdictionTransaction.group_labelTransaction.created_atTransaction.modified_at
BucketTransactionRefTransactionCatalogueOutOfWindowTransactionStubOutOfWindowTransactionSummaryLedgerDatePartition
- aeat.domain.transactions._protocols module
TransactionCatalogueRepositoryProtocolTransactionCatalogueRepositoryProtocol.bucket_idTransactionCatalogueRepositoryProtocol.exists()TransactionCatalogueRepositoryProtocol.load()TransactionCatalogueRepositoryProtocol.load_for_date_range()TransactionCatalogueRepositoryProtocol.partition_by_date_range()TransactionCatalogueRepositoryProtocol.save()
- aeat.domain.transactions._raw_transaction module
- aeat.domain.transactions._repository module
- aeat.domain.transactions._service module