aeat.application.ledger package¶
Application facade for bucket-scoped ledger and invoice-adjacent workflows.
Owns the operator-facing ledger lifecycle: importing bank statements and
records, classifying transactions for tax, splitting and merging entries,
attaching evidence, and checking a period’s tax-readiness before a modelo
calculation consumes it. The primary movement fact remains
ledger_transaction. Purchase invoice evidence and payable / collectible
business invoices are related bucket-scoped records, not ledger rows, and their
source-kind identity is carried by
BusinessOperationInvoiceDirection.
The ledger-mounted invoice surface is intentionally slim:
BusinessOperationInvoice records carry the
BusinessOperationInvoiceDirection source-kind discriminator consumed by
PayableInvoiceService and CollectibleInvoiceService. Rich
invoice-line detail and reconciliation links stay in
domain.invoices, while the application invoice package maps issued /
received invoice directions back onto
core.BindingSourceKind.PAYABLE_INVOICE and
core.BindingSourceKind.COLLECTIBLE_INVOICE.
Major declarations:
import_ledger_source()andbulk_classify_from_csv()- the ingest and batch-classification entry points.create_manual_transaction(),split_transaction(), andmerge_transactions()- manual ledger edits.preflight_ledger_tax_readiness()withLedgerPreflightReportandLedgerPreflightIssue- the readiness gate that reports rows missing a category, usage-ratio reference, base, IVA rate, currency, censo-aligned HOME_OFFICE ratio, or prorrata reference.eligible_ratio_categories(),set_usage_ratio(),unset_usage_ratio(), andvalidate_ratios_for_bucket()- the operator-facingaeat app ledger ratiosbackend that bridges category proportionality rules to persisted usage-ratio overrides.PurchaseInvoiceEvidenceService- the evidence lifecycle for receipts or supplier invoice artefacts attached to ledger transactions, andextract_invoice_fields()withInvoiceDraft- the on-host field-extraction primitive an operator reviews before minting adomain.invoices.Invoicefrom a PDF.confirm_invoice_draft_from_evidence()withInvoiceConfirmationResult- the non-interactive confirm step that re-extracts a draft, layers operator overrides on top, and delegates the actual write toapplication.invoices.create_catalogue_invoice().PayableInvoiceService,CollectibleInvoiceService, andBusinessOperationInvoiceRepository- the encrypted CRUD surface behindaeat app ledger invoice --kind issued|received.resolve_transaction_id()- the unambiguous-prefix id resolver, andresolve_lineage_transaction_id()- its read-side lineage-aware variant that resolves a superseded (pre-edit) handle to the live row.The typed command and result records (
LedgerSourceImportCommand,LedgerImportOperationResult,LedgerReviewQueryResult,LedgerStatusReport, and siblings) that carry each operation across the CLI boundary.
See also
application.invoicesRich invoice orchestration and the
application.invoices.InvoiceCatalogueSourceResolverthat adapts invoice records into the calculation source mesh.application.aggregationLedger aggregation resolvers such as
application.aggregation.LedgerIvaAggregationSourceResolverand the sharedapplication.aggregation.CalculationSourceResolutionenvelope consumed by modelo calculation.application.modeloWork-unit calculation actions that call
preflight_ledger_tax_readiness()before resolving ledger-backed bindings for adomain.modelos.WorkUnit.domain.transactionsThe transaction catalogue and lifecycle states that remain the ledger’s durable movement authority.
domain.categoriesClosed spending-category identifiers and proportionality rules accepted by ledger
category_idand ratio workflows.domain.usage_ratiosBucket-scoped, encrypted per-category business-use ratios validated by ledger commands and preflight.
domain.ivaLegal IVA classification and prorrata substrates referenced by ledger tax fields without becoming ledger lifecycle ownership.
Submodules¶
- aeat.application.ledger._actions_classification module
- aeat.application.ledger._actions_common module
- aeat.application.ledger._actions_export module
- aeat.application.ledger._actions_import module
- aeat.application.ledger._actions_lifecycle module
- aeat.application.ledger._actions_manual module
create_manual_transaction()attach_manual_transaction_evidence()get_manual_transaction()list_manual_transactions()query_ledger_review_rows()ledger_transaction_payload()ledger_transaction_review_payload()ledger_transaction_result_payload()ledger_transaction_tracking_payload()summarize_manual_transactions()update_manual_transaction()update_manual_transaction_fields()
- aeat.application.ledger._actions_split_merge module
- aeat.application.ledger._business_operation_invoice module
BusinessOperationInvoiceDirectionBusinessOperationInvoiceInputErrorBusinessOperationInvoiceNotFoundErrorvalidate_eu_iva_id()BusinessOperationInvoiceBusinessOperationInvoice.invoice_idBusinessOperationInvoice.source_kindBusinessOperationInvoice.bucket_idBusinessOperationInvoice.counterparty_nifBusinessOperationInvoice.counterparty_nameBusinessOperationInvoice.invoice_numberBusinessOperationInvoice.invoice_dateBusinessOperationInvoice.currencyBusinessOperationInvoice.taxable_baseBusinessOperationInvoice.iva_rateBusinessOperationInvoice.iva_amountBusinessOperationInvoice.total_amountBusinessOperationInvoice.notesBusinessOperationInvoice.country_codeBusinessOperationInvoice.eu_iva_idBusinessOperationInvoice.operation_typeBusinessOperationInvoice.created_atBusinessOperationInvoice.updated_at
derive_business_operation_invoice_id()BusinessOperationInvoicePatchBusinessOperationInvoicePatch.counterparty_nifBusinessOperationInvoicePatch.counterparty_nameBusinessOperationInvoicePatch.invoice_numberBusinessOperationInvoicePatch.invoice_dateBusinessOperationInvoicePatch.currencyBusinessOperationInvoicePatch.taxable_baseBusinessOperationInvoicePatch.iva_rateBusinessOperationInvoicePatch.iva_amountBusinessOperationInvoicePatch.total_amountBusinessOperationInvoicePatch.notesBusinessOperationInvoicePatch.country_codeBusinessOperationInvoicePatch.eu_iva_idBusinessOperationInvoicePatch.operation_type
BusinessOperationInvoiceResultBusinessOperationInvoiceDocumentBusinessOperationInvoiceRepositoryPayableInvoiceServiceCollectibleInvoiceService
- aeat.application.ledger._evidence module
MediaKindPurchaseInvoiceEvidenceInputErrorPurchaseInvoiceEvidenceNotFoundErrorPurchaseInvoiceEvidencePurchaseInvoiceEvidence.evidence_idPurchaseInvoiceEvidence.bucket_idPurchaseInvoiceEvidence.source_pathPurchaseInvoiceEvidence.source_sha256PurchaseInvoiceEvidence.attachment_idPurchaseInvoiceEvidence.media_kindPurchaseInvoiceEvidence.supplierPurchaseInvoiceEvidence.invoice_numberPurchaseInvoiceEvidence.invoice_datePurchaseInvoiceEvidence.taxable_basePurchaseInvoiceEvidence.iva_ratePurchaseInvoiceEvidence.iva_amountPurchaseInvoiceEvidence.notesPurchaseInvoiceEvidence.created_atPurchaseInvoiceEvidence.updated_at
derive_purchase_invoice_evidence_id()PurchaseInvoiceEvidenceDocumentPurchaseInvoiceEvidencePatchPurchaseInvoiceEvidenceResultPurchaseInvoiceEvidenceRepositoryPurchaseInvoiceEvidenceService
- aeat.application.ledger._evidence_advisory module
- aeat.application.ledger._evidence_draft module
- aeat.application.ledger._evidence_draft_vision module
- aeat.application.ledger._evidence_input module
- aeat.application.ledger._evidence_split module
- aeat.application.ledger._evidence_textlayer module
- aeat.application.ledger._id_resolution module
- aeat.application.ledger._llm_classification module
available_llm_providers()is_llm_provider_available()suggest_llm_classification()apply_llm_classification()saturate_llm_classification()apply_saturated_llm_classification()derive_operator_iva_substrate()suggest_evidence_split()apply_evidence_split()apply_evidence_classification()reject_llm_suggestion()
- aeat.application.ledger._llm_diagnostics module
DEFAULT_LOW_CONFIDENCE_THRESHOLDLlmUsageProviderMetricsLlmConfidenceProviderMetricsLlmConfidenceProviderMetrics.providerLlmConfidenceProviderMetrics.classified_countLlmConfidenceProviderMetrics.low_confidence_countLlmConfidenceProviderMetrics.high_confidence_countLlmConfidenceProviderMetrics.medium_confidence_countLlmConfidenceProviderMetrics.min_confidenceLlmConfidenceProviderMetrics.max_confidenceLlmConfidenceProviderMetrics.mean_confidence
LlmDiagnosticsReportLlmDiagnosticsReport.sinceLlmDiagnosticsReport.untilLlmDiagnosticsReport.low_confidence_thresholdLlmDiagnosticsReport.usage_providersLlmDiagnosticsReport.total_callsLlmDiagnosticsReport.total_cache_hitsLlmDiagnosticsReport.total_input_tokensLlmDiagnosticsReport.total_output_tokensLlmDiagnosticsReport.total_cost_estimate_usdLlmDiagnosticsReport.confidence_providersLlmDiagnosticsReport.total_classifiedLlmDiagnosticsReport.total_low_confidenceLlmDiagnosticsReport.has_data
build_llm_diagnostics_report()
- aeat.application.ledger._llm_suggestions module
LLMProviderLLMClassificationSuggestionLLMClassificationSuggestion.transaction_idLLMClassificationSuggestion.providerLLMClassificationSuggestion.provenanceLLMClassificationSuggestion.classificationLLMClassificationSuggestion.categoryLLMClassificationSuggestion.confidenceLLMClassificationSuggestion.reasonLLMClassificationSuggestion.evidence_idLLMClassificationSuggestion.multiple_componentsLLMClassificationSuggestion.recommends_split
LLMProviderAvailabilityLLMSaturatedSuggestionLLMSaturatedSuggestion.transaction_idLLMSaturatedSuggestion.providerLLMSaturatedSuggestion.provenanceLLMSaturatedSuggestion.classificationLLMSaturatedSuggestion.categoryLLMSaturatedSuggestion.confidenceLLMSaturatedSuggestion.reasonLLMSaturatedSuggestion.iva_categoryLLMSaturatedSuggestion.business_pctLLMSaturatedSuggestion.iva_rateLLMSaturatedSuggestion.taxable_baseLLMSaturatedSuggestion.iva_amountLLMSaturatedSuggestion.rate_derivableLLMSaturatedSuggestion.derivation_noteLLMSaturatedSuggestion.evidence_idLLMSaturatedSuggestion.evidence_advisoryLLMSaturatedSuggestion.multiple_componentsLLMSaturatedSuggestion.recommends_split
OperatorIvaDerivationResultOperatorIvaDerivationResult.transaction_idOperatorIvaDerivationResult.iva_categoryOperatorIvaDerivationResult.derivableOperatorIvaDerivationResult.iva_rateOperatorIvaDerivationResult.taxable_baseOperatorIvaDerivationResult.iva_amountOperatorIvaDerivationResult.noteOperatorIvaDerivationResult.result
LLMSplitChildSuggestionLLMSplitChildSuggestion.proportionLLMSplitChildSuggestion.amountLLMSplitChildSuggestion.descriptionLLMSplitChildSuggestion.categoryLLMSplitChildSuggestion.iva_categoryLLMSplitChildSuggestion.iva_rateLLMSplitChildSuggestion.taxable_baseLLMSplitChildSuggestion.iva_amountLLMSplitChildSuggestion.rate_derivableLLMSplitChildSuggestion.derivation_noteLLMSplitChildSuggestion.evidence_citation
LLMSplitSuggestionLLMSplitApplyResultLLMSuggestionRejectionResult
- aeat.application.ledger._models module
ManualLedgerTransactionCommandManualLedgerTransactionCommand.bucket_idManualLedgerTransactionCommand.booked_dateManualLedgerTransactionCommand.value_dateManualLedgerTransactionCommand.amountManualLedgerTransactionCommand.currencyManualLedgerTransactionCommand.directionManualLedgerTransactionCommand.counterpartyManualLedgerTransactionCommand.descriptionManualLedgerTransactionCommand.business_classificationManualLedgerTransactionCommand.business_pctManualLedgerTransactionCommand.category_idManualLedgerTransactionCommand.taxable_baseManualLedgerTransactionCommand.iva_rateManualLedgerTransactionCommand.iva_amountManualLedgerTransactionCommand.recargo_amountManualLedgerTransactionCommand.irpf_categoryManualLedgerTransactionCommand.usage_ratio_idManualLedgerTransactionCommand.prorrata_referenceManualLedgerTransactionCommand.purchase_invoice_evidence_idManualLedgerTransactionCommand.attachment_idsManualLedgerTransactionCommand.notesManualLedgerTransactionCommand.iva_categoryManualLedgerTransactionCommand.counterparty_eu_member_stateManualLedgerTransactionCommand.art_104_tres_exclusionManualLedgerTransactionCommand.input_classificationManualLedgerTransactionCommand.prorrata_sector_idManualLedgerTransactionCommand.actorManualLedgerTransactionCommand.source_commandManualLedgerTransactionCommand.idempotency_keyManualLedgerTransactionCommand.classified_by_overrideManualLedgerTransactionCommand.source_jurisdictionManualLedgerTransactionCommand.group_label
ManualLedgerTransactionPatchManualLedgerTransactionPatch.booked_dateManualLedgerTransactionPatch.value_dateManualLedgerTransactionPatch.amountManualLedgerTransactionPatch.currencyManualLedgerTransactionPatch.directionManualLedgerTransactionPatch.counterpartyManualLedgerTransactionPatch.descriptionManualLedgerTransactionPatch.business_classificationManualLedgerTransactionPatch.business_pctManualLedgerTransactionPatch.category_idManualLedgerTransactionPatch.taxable_baseManualLedgerTransactionPatch.iva_rateManualLedgerTransactionPatch.iva_amountManualLedgerTransactionPatch.recargo_amountManualLedgerTransactionPatch.irpf_categoryManualLedgerTransactionPatch.usage_ratio_idManualLedgerTransactionPatch.prorrata_referenceManualLedgerTransactionPatch.purchase_invoice_evidence_idManualLedgerTransactionPatch.attachment_idsManualLedgerTransactionPatch.notesManualLedgerTransactionPatch.iva_categoryManualLedgerTransactionPatch.counterparty_eu_member_stateManualLedgerTransactionPatch.source_jurisdictionManualLedgerTransactionPatch.group_label
ManualLedgerTransactionResultLedgerTransactionPayloadLedgerTransactionPayload.transaction_idLedgerTransactionPayload.dateLedgerTransactionPayload.booked_dateLedgerTransactionPayload.value_dateLedgerTransactionPayload.amountLedgerTransactionPayload.currencyLedgerTransactionPayload.directionLedgerTransactionPayload.counterpartyLedgerTransactionPayload.descriptionLedgerTransactionPayload.business_classificationLedgerTransactionPayload.business_pctLedgerTransactionPayload.category_idLedgerTransactionPayload.taxable_baseLedgerTransactionPayload.iva_rateLedgerTransactionPayload.iva_amountLedgerTransactionPayload.iva_categoryLedgerTransactionPayload.counterparty_eu_member_stateLedgerTransactionPayload.irpf_categoryLedgerTransactionPayload.usage_ratio_idLedgerTransactionPayload.prorrata_referenceLedgerTransactionPayload.purchase_invoice_evidence_idLedgerTransactionPayload.attachment_idsLedgerTransactionPayload.notesLedgerTransactionPayload.lifecycle_stateLedgerTransactionPayload.classified_byLedgerTransactionPayload.classified_atLedgerTransactionPayload.classification_reasonLedgerTransactionPayload.classification_confidenceLedgerTransactionPayload.source_jurisdictionLedgerTransactionPayload.value_in_eurLedgerTransactionPayload.fx_rateLedgerTransactionPayload.created_atLedgerTransactionPayload.modified_at
LedgerTransactionReviewPayloadLedgerTransactionResultPayloadLedgerTransactionTrackingPayloadSplitChildCommandSplitTransactionResultMergeTransactionsResultMergeTransactionsResult.bucket_idMergeTransactionsResult.split_group_idMergeTransactionsResult.parent_transaction_idMergeTransactionsResult.merged_transaction_idMergeTransactionsResult.source_child_idsMergeTransactionsResult.merged_transactionMergeTransactionsResult.parent_transactionMergeTransactionsResult.bucket_event_id
LedgerImportOperationResultLedgerSourceValidationReportLedgerSourceVerificationReportLedgerImportDiagnosticReportLedgerSourceImportCommandLedgerSourceImportCommand.bucket_idLedgerSourceImportCommand.pathLedgerSourceImportCommand.providerLedgerSourceImportCommand.dry_runLedgerSourceImportCommand.verifyLedgerSourceImportCommand.sourceLedgerSourceImportCommand.periodLedgerSourceImportCommand.actorLedgerSourceImportCommand.source_command
LedgerSourceImportResultLedgerSourceImportResult.rowsLedgerSourceImportResult.importedLedgerSourceImportResult.skippedLedgerSourceImportResult.likely_duplicatesLedgerSourceImportResult.dry_runLedgerSourceImportResult.verifyLedgerSourceImportResult.periodLedgerSourceImportResult.bucket_idLedgerSourceImportResult.import_batch_idLedgerSourceImportResult.bucket_event_idsLedgerSourceImportResult.imported_transaction_refsLedgerSourceImportResult.skipped_transaction_refsLedgerSourceImportResult.likely_duplicate_transaction_refsLedgerSourceImportResult.validationLedgerSourceImportResult.sourceLedgerSourceImportResult.diagnostics
LedgerReviewQueryLedgerReviewRowLedgerReviewQueryResultLedgerStatusReportLedgerStatusReport.bucket_idLedgerStatusReport.business_income_totalLedgerStatusReport.business_expense_totalLedgerStatusReport.business_net_totalLedgerStatusReport.total_countLedgerStatusReport.active_countLedgerStatusReport.archived_countLedgerStatusReport.stashed_countLedgerStatusReport.split_countLedgerStatusReport.pending_review_countLedgerStatusReport.reviewed_countLedgerStatusReport.skipped_countLedgerStatusReport.periodLedgerStatusReport.checked_transaction_countLedgerStatusReport.readiness_issue_countLedgerStatusReport.ready
LedgerRemovalBlockerLedgerTransactionRemovalReportLedgerTransactionRemovalReport.bucket_idLedgerTransactionRemovalReport.transaction_idLedgerTransactionRemovalReport.removedLedgerTransactionRemovalReport.dry_runLedgerTransactionRemovalReport.actorLedgerTransactionRemovalReport.reasonLedgerTransactionRemovalReport.cascaded_purchase_invoice_evidence_idsLedgerTransactionRemovalReport.cascaded_attachment_idsLedgerTransactionRemovalReport.blocking_modelo_referencesLedgerTransactionRemovalReport.stale_draft_revision_referencesLedgerTransactionRemovalReport.bucket_event_ids
LedgerCatalogueResetReportLedgerCatalogueResetReport.bucket_idLedgerCatalogueResetReport.removed_transaction_idsLedgerCatalogueResetReport.resetLedgerCatalogueResetReport.dry_runLedgerCatalogueResetReport.actorLedgerCatalogueResetReport.reasonLedgerCatalogueResetReport.cascaded_purchase_invoice_evidence_idsLedgerCatalogueResetReport.cascaded_attachment_idsLedgerCatalogueResetReport.blocking_modelo_referencesLedgerCatalogueResetReport.stale_draft_revision_referencesLedgerCatalogueResetReport.bucket_event_ids
LedgerExportCommandBulkClassifyRowBulkClassifyFailureBulkClassifyResultApplyRulesAppliedRowApplyRulesResultLedgerExportRowLedgerExportRow.bucket_idLedgerExportRow.transaction_idLedgerExportRow.lifecycle_stateLedgerExportRow.booked_dateLedgerExportRow.value_dateLedgerExportRow.effective_dateLedgerExportRow.amountLedgerExportRow.currencyLedgerExportRow.directionLedgerExportRow.counterpartyLedgerExportRow.descriptionLedgerExportRow.business_classificationLedgerExportRow.business_pctLedgerExportRow.category_idLedgerExportRow.taxable_baseLedgerExportRow.iva_rateLedgerExportRow.iva_amountLedgerExportRow.iva_categoryLedgerExportRow.counterparty_eu_member_stateLedgerExportRow.irpf_categoryLedgerExportRow.usage_ratio_idLedgerExportRow.prorrata_referenceLedgerExportRow.purchase_invoice_evidence_idLedgerExportRow.attachment_idsLedgerExportRow.notesLedgerExportRow.created_byLedgerExportRow.created_source_commandLedgerExportRow.source_jurisdictionLedgerExportRow.value_in_eurLedgerExportRow.fx_rate
LedgerExportResultLedgerExportResult.bucket_idLedgerExportResult.export_idLedgerExportResult.export_formatLedgerExportResult.media_typeLedgerExportResult.filename_extensionLedgerExportResult.row_countLedgerExportResult.byte_sizeLedgerExportResult.sha256LedgerExportResult.fieldnamesLedgerExportResult.rowsLedgerExportResult.payloadLedgerExportResult.bucket_event_ids
- aeat.application.ledger._participation_read module
- aeat.application.ledger._preflight module
LedgerPreflightIssueReasonLedgerPreflightIssueReason.MISSING_BUSINESS_CLASSIFICATIONLedgerPreflightIssueReason.MISSING_CATEGORYLedgerPreflightIssueReason.MISSING_TAXABLE_BASELedgerPreflightIssueReason.MISSING_IVA_AMOUNTLedgerPreflightIssueReason.MISSING_IVA_RATELedgerPreflightIssueReason.MISSING_EUR_TAX_SUBSTRATELedgerPreflightIssueReason.MISSING_COUNTERPARTY_EU_MEMBER_STATELedgerPreflightIssueReason.DOMESTIC_COUNTERPARTY_ON_INTRA_COMMUNITY_TRANSACTIONLedgerPreflightIssueReason.EU_MEMBER_STATE_ON_EXPORT_TRANSACTIONLedgerPreflightIssueReason.MISSING_PROPORTIONALITY_REFERENCELedgerPreflightIssueReason.UNSUPPORTED_CURRENCYLedgerPreflightIssueReason.UNSUPPORTED_PERIODLedgerPreflightIssueReason.CENSO_RATIO_MISMATCHLedgerPreflightIssueReason.ANOMALY_NON_DECLARABLE_IVA_CATEGORYLedgerPreflightIssueReason.ANOMALY_NON_DECLARABLE_RECARGO_EQUIVALENCIA
LedgerPreflightIssueLedgerPreflightReportpreflight_ledger_tax_readiness()preflight_transaction_catalogue()
- aeat.application.ledger._protocols module
- aeat.application.ledger._ratios module
- aeat.application.ledger._review_projection module
- aeat.application.ledger._rule_repository module
- aeat.application.ledger._vision_classifier module