cadrumo.domain.transactions package¶
Inert namespace for immutable ledger transactions.
The transaction domain boundary used by ledger is defined
across the owning modules listed below. 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, key-derivation helpers, and namespace constant are imported from their
defining modules.
LLM-facing LLMClassifier,
LLMSplitProposer,
PromptSpec,
LedgerClassificationRule, and
ledger_irpf_category_catalogue() are likewise
imported from their defining modules. 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.
Consumers import from the owning module – models, llm,
enums, irpf_categories, retencion_facts,
raw_transaction, repository, service, model_tier,
classification_rule, model_validation, errors – rather
than from this package root, which is inert.
The root carried a lazy guard for the persistence port so an importer did not
pay for the repository module. That deferral is now structural: a caller
naming repository asks for it, and one naming models does not.
Submodules¶
- cadrumo.domain.transactions.cash_accounting_validation module
- cadrumo.domain.transactions.classification_rule module
LedgerClassificationRuleLedgerClassificationRule.rule_idLedgerClassificationRule.description_patternLedgerClassificationRule.classificationLedgerClassificationRule.category_idLedgerClassificationRule.priorityLedgerClassificationRule.created_atLedgerClassificationRule.actorLedgerClassificationRule.create()LedgerClassificationRule.matches()
- cadrumo.domain.transactions.dates module
- cadrumo.domain.transactions.enums module
TransactionDirectionBusinessClassificationBusinessClassification.BUSINESSBusinessClassification.PERSONALBusinessClassification.MIXEDBusinessClassification.NOT_YET_PROCESSEDBusinessClassification.PROCESSED_UNCLASSIFIEDBusinessClassification.SKIPPED_BY_RULEBusinessClassification.FAILED_VALIDATIONBusinessClassification.REVIEWED_EXCLUDED
TransactionLifecycleStateSplitRoleCLASSIFIED_STATESBUSINESS_BEARING_STATESSHARE_BEARING_STATEStakes_business_share()is_classified()
- cadrumo.domain.transactions.errors module
TransactionErrorTransactionCatalogueErrorTransactionPersistenceErrorStoredTransactionDriftErrorLedgerStorageErrorLedgerNoActiveBucketErrorTransactionNotFoundErrorTransactionIdPrefixErrorLLMClassifierErrorTransactionValidationErrorLedgerLinkErrorLedgerCheckErrorLedgerPreflightErrorClassificationRuleError
- cadrumo.domain.transactions.gross_validation module
- cadrumo.domain.transactions.irpf_categories module
- cadrumo.domain.transactions.lineage_models module
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()
- cadrumo.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()
- cadrumo.domain.transactions.m210_income_classification module
- cadrumo.domain.transactions.model_tier module
- cadrumo.domain.transactions.model_validation module
- cadrumo.domain.transactions.models module
derive_transaction_id()normalise_movement_reference()derive_import_fingerprint()derive_movement_day_key()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.tipo_actividadTransaction.concepto_ingresoTransaction.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.deduction_fact_kindTransaction.deduction_provenanceTransaction.investment_asset_idTransaction.rectifies_ledger_idTransaction.exemption_articleTransaction.counterparty_countryTransaction.counterparty_identification_stateTransaction.cash_accounting_treatmentTransaction.operation_dateTransaction.cash_accounting_payment_evidenceTransaction.fx_rateTransaction.value_in_eurTransaction.rate_sourceTransaction.rate_dateTransaction.source_jurisdictionTransaction.m210_income_classificationTransaction.group_labelTransaction.created_atTransaction.modified_atTransaction.counterparty_eu_member_state
BucketTransactionRefexisting_transaction_import_fingerprints()TransactionCatalogueOutOfWindowTransactionIndexEntryOutOfWindowTransactionSummaryLedgerDatePartition
- cadrumo.domain.transactions.protocols module
TransactionCatalogueRepositoryProtocolTransactionCatalogueRepositoryProtocol.bucket_idTransactionCatalogueRepositoryProtocol.exists()TransactionCatalogueRepositoryProtocol.load()TransactionCatalogueRepositoryProtocol.load_for_date_range()TransactionCatalogueRepositoryProtocol.load_by_ids()TransactionCatalogueRepositoryProtocol.partition_by_date_range()TransactionCatalogueRepositoryProtocol.save()
- cadrumo.domain.transactions.raw_transaction module
- cadrumo.domain.transactions.repository module
- cadrumo.domain.transactions.retencion_facts module
RirpfArt95RetencionRatesretencion_effective_date()load_retencion_actividades_rates()rirpf_art95_retencion_legal_refs()statutory_activity_retencion_rates()professional_activity_retencion_rates()maximum_supported_activity_retencion_rate()AdministradorRetencionRatesload_administrador_retencion_rates()administrador_retencion_legal_refs()
- cadrumo.domain.transactions.service module
- cadrumo.domain.transactions.tipo_actividad_partitions module
- cadrumo.domain.transactions.volumen_ingresos module