cadrumo.domain.transactions.lineage_models module

Immutable transaction provenance and split-lineage models.

class DecisionProvenance(**data)[source]

Bases: BaseModel

Typed provenance for one classification decision.

Parameters:

data (Any)

decided_by: str
decided_at: UtcInstant
reason: str
confidence: Decimal | None
manual_override: bool
class ClassificationHistoryEntry(**data)[source]

Bases: BaseModel

One frozen record in a transaction’s classification chain.

Parameters:

data (Any)

business_classification: BusinessClassification
business_pct: Decimal | None
classified_at: UtcInstant
classified_by: str
reason: str
category_id: str | None
notes: str
confidence: Decimal | None
provenance: DecisionProvenance | None
class TransactionEvidenceProvenanceEntry(**data)[source]

Bases: BaseModel

Actor/source lineage for evidence linked to one transaction.

Parameters:

data (Any)

evidence_id: str
evidence_kind: Literal['purchase_invoice_evidence', 'attachment']
actor: str
source_command: str
linked_at: UtcInstant
bucket_event_id: Hex64Str | None
class TransactionEditLineageEntry(**data)[source]

Bases: BaseModel

One durable manual correction applied to a transaction row.

Parameters:

data (Any)

previous_transaction_id: TransactionId
actor: str
source_command: str
edited_at: UtcInstant
bucket_event_id: Hex64Str | None
class TransactionLifecycleLineageEntry(**data)[source]

Bases: BaseModel

One durable lifecycle transition applied to a transaction row.

Parameters:

data (Any)

previous_state: TransactionLifecycleState
state: TransactionLifecycleState
actor: str
source_command: str
changed_at: UtcInstant
reason: str
bucket_event_id: Hex64Str | None
class SplitLineage(**data)[source]

Bases: BaseModel

Split-lineage anchor embedded on a parent/child/merged transaction.

Parameters:

data (Any)

split_group_id: Hex64Str
role: SplitRole
sibling_transaction_ids: tuple[str, ...]
derive_split_group_id(*, parent_transaction_id, child_amounts, child_narratives)[source]

Deterministically derive the split_group_id for a split cohort.

Return type:

str

Parameters: