app.models packageΒΆ
SubmodulesΒΆ
- app.models.bank_statement module
BankStatementBankStatement.account_holderBankStatement.account_numberBankStatement.bank_nameBankStatement.closing_balanceBankStatement.currencyBankStatement.detected_delimiterBankStatement.detected_encodingBankStatement.detected_formatBankStatement.documentBankStatement.document_idBankStatement.extracted_atBankStatement.idBankStatement.opening_balanceBankStatement.processing_jobBankStatement.processing_job_idBankStatement.raw_headersBankStatement.statement_fromBankStatement.statement_toBankStatement.total_rows_parsedBankStatement.total_rows_skippedBankStatement.transactionsBankStatement.updated_at
BankTransactionBankTransaction.amountBankTransaction.balance_afterBankTransaction.bank_statementBankTransaction.bank_statement_idBankTransaction.created_atBankTransaction.currencyBankTransaction.descriptionBankTransaction.directionBankTransaction.idBankTransaction.parse_warningsBankTransaction.raw_descriptionBankTransaction.reference_numberBankTransaction.row_indexBankTransaction.transaction_dateBankTransaction.transaction_typeBankTransaction.value_date
- app.models.base module
- app.models.custom_types module
- app.models.document module
DocumentDocument.checksum_sha256Document.created_atDocument.deleted_atDocument.document_typeDocument.file_size_bytesDocument.file_typeDocument.filenameDocument.idDocument.is_deletedDocument.original_nameDocument.processing_jobsDocument.storage_pathDocument.updated_atDocument.uploaded_atDocument.uploaded_by
- app.models.enums module
- app.models.invoice module
InvoiceInvoice.confidenceInvoice.currencyInvoice.discount_amountInvoice.documentInvoice.document_idInvoice.due_dateInvoice.extracted_atInvoice.idInvoice.invoice_dateInvoice.invoice_indexInvoice.invoice_numberInvoice.line_itemsInvoice.notesInvoice.page_range_endInvoice.page_range_startInvoice.processing_jobInvoice.processing_job_idInvoice.raw_date_textInvoice.raw_total_textInvoice.raw_vendor_nameInvoice.subtotalInvoice.tax_amountInvoice.total_amountInvoice.updated_atInvoice.vendorInvoice.vendor_id
InvoiceLineItemInvoiceLineItem.created_atInvoiceLineItem.descriptionInvoiceLineItem.idInvoiceLineItem.invoiceInvoiceLineItem.invoice_idInvoiceLineItem.line_numberInvoiceLineItem.line_totalInvoiceLineItem.quantityInvoiceLineItem.skuInvoiceLineItem.tax_amountInvoiceLineItem.tax_rateInvoiceLineItem.unit_of_measureInvoiceLineItem.unit_price
Vendor
- app.models.processing_job module
ProcessingJobProcessingJob.bank_statementProcessingJob.completed_atProcessingJob.created_atProcessingJob.documentProcessingJob.document_idProcessingJob.error_detailProcessingJob.error_messageProcessingJob.idProcessingJob.invoiceProcessingJob.is_reprocessProcessingJob.max_retriesProcessingJob.ocr_confidence_avgProcessingJob.ocr_engineProcessingJob.ocr_usedProcessingJob.parser_versionProcessingJob.pdf_encryption_typeProcessingJob.pdf_password_usedProcessingJob.retry_countProcessingJob.scanned_pagesProcessingJob.started_atProcessingJob.statusProcessingJob.updated_atProcessingJob.warnings
Module contentsΒΆ
Import all models so SQLAlchemy can discover them for metadata.create_all().
- class app.models.BankStatement(**kwargs)[source]ΒΆ
Bases:
UUIDPrimaryKeyMixin,BaseStatement-level metadata extracted from a CSV bank statement.
- account_holder: Mapped[str | None]ΒΆ
- account_number: Mapped[str | None]ΒΆ
- bank_name: Mapped[str | None]ΒΆ
- closing_balance: Mapped[Decimal | None]ΒΆ
- currency: Mapped[str | None]ΒΆ
- detected_delimiter: Mapped[str | None]ΒΆ
- detected_encoding: Mapped[str | None]ΒΆ
- detected_format: Mapped[str | None]ΒΆ
- document_id: Mapped[UUID]ΒΆ
- extracted_at: Mapped[datetime]ΒΆ
- idΒΆ
- opening_balance: Mapped[Decimal | None]ΒΆ
- processing_job: Mapped[ProcessingJob]ΒΆ
- processing_job_id: Mapped[UUID]ΒΆ
- raw_headers: Mapped[dict[str, Any] | None]ΒΆ
- statement_from: Mapped[date | None]ΒΆ
- statement_to: Mapped[date | None]ΒΆ
- total_rows_parsed: Mapped[int | None]ΒΆ
- total_rows_skipped: Mapped[int | None]ΒΆ
- transactions: Mapped[list[BankTransaction]]ΒΆ
- updated_at: Mapped[datetime]ΒΆ
- class app.models.BankTransaction(**kwargs)[source]ΒΆ
Bases:
UUIDPrimaryKeyMixin,BaseIndividual transaction row from a bank statement CSV.
- amount: Mapped[Decimal]ΒΆ
- balance_after: Mapped[Decimal | None]ΒΆ
- bank_statement: Mapped[BankStatement]ΒΆ
- bank_statement_id: Mapped[UUID]ΒΆ
- created_at: Mapped[datetime]ΒΆ
- currency: Mapped[str | None]ΒΆ
- description: Mapped[str | None]ΒΆ
- direction: Mapped[str]ΒΆ
- id: Mapped[UUID]ΒΆ
- parse_warnings: Mapped[list[str] | None]ΒΆ
- raw_description: Mapped[str | None]ΒΆ
- reference_number: Mapped[str | None]ΒΆ
- row_index: Mapped[int]ΒΆ
- transaction_date: Mapped[date]ΒΆ
- transaction_type: Mapped[TransactionType]ΒΆ
- value_date: Mapped[date | None]ΒΆ
- class app.models.Base(**kwargs: Any)[source]ΒΆ
Bases:
DeclarativeBase- metadata: ClassVar[MetaData] = MetaData()ΒΆ
Refers to the
_schema.MetaDatacollection that will be used for new_schema.Tableobjects.See also
orm_declarative_metadata
- registry: ClassVar[registry] = <sqlalchemy.orm.decl_api.registry object>ΒΆ
Refers to the
_orm.registryin use where new_orm.Mapperobjects will be associated.
- class app.models.Document(**kwargs)[source]ΒΆ
Bases:
UUIDPrimaryKeyMixin,TimestampMixin,BaseImmutable record of every uploaded file. Acts as the root entity β everything else hangs off this.
- checksum_sha256: Mapped[str]ΒΆ
- created_atΒΆ
- deleted_at: Mapped[datetime | None]ΒΆ
- document_type: Mapped[DocumentType]ΒΆ
- file_size_bytes: Mapped[int]ΒΆ
- file_type: Mapped[str]ΒΆ
- filename: Mapped[str]ΒΆ
- idΒΆ
- is_deleted: Mapped[bool]ΒΆ
- original_name: Mapped[str]ΒΆ
- processing_jobs: Mapped[list[ProcessingJob]]ΒΆ
- storage_path: Mapped[str]ΒΆ
- updated_atΒΆ
- uploaded_at: Mapped[datetime]ΒΆ
- uploaded_by: Mapped[str]ΒΆ
- class app.models.DocumentType(*values)[source]ΒΆ
Bases:
str,Enum- BANK_STATEMENT = 'bank_statement'ΒΆ
- INVOICE = 'invoice'ΒΆ
- class app.models.Invoice(**kwargs)[source]ΒΆ
Bases:
UUIDPrimaryKeyMixin,BaseExtracted Invoice Data.
- confidence: Mapped[Decimal | None]ΒΆ
- currency: Mapped[str | None]ΒΆ
- discount_amount: Mapped[Decimal | None]ΒΆ
- document_id: Mapped[UUID]ΒΆ
- due_date: Mapped[date | None]ΒΆ
- extracted_at: Mapped[datetime]ΒΆ
- idΒΆ
- invoice_date: Mapped[date | None]ΒΆ
- invoice_index: Mapped[int]ΒΆ
- invoice_number: Mapped[str | None]ΒΆ
- line_items: Mapped[list[InvoiceLineItem]]ΒΆ
- notes: Mapped[str | None]ΒΆ
- page_range_end: Mapped[int | None]ΒΆ
- page_range_start: Mapped[int | None]ΒΆ
- processing_job: Mapped[ProcessingJob]ΒΆ
- processing_job_id: Mapped[UUID]ΒΆ
- raw_date_text: Mapped[str | None]ΒΆ
- raw_total_text: Mapped[str | None]ΒΆ
- raw_vendor_name: Mapped[str | None]ΒΆ
- subtotal: Mapped[Decimal | None]ΒΆ
- tax_amount: Mapped[Decimal | None]ΒΆ
- total_amount: Mapped[Decimal | None]ΒΆ
- updated_at: Mapped[datetime]ΒΆ
- vendor_id: Mapped[UUID | None]ΒΆ
- class app.models.InvoiceLineItem(**kwargs)[source]ΒΆ
Bases:
UUIDPrimaryKeyMixin,BaseIndividual line items within an invoice.
- created_at: Mapped[datetime]ΒΆ
- description: Mapped[str | None]ΒΆ
- id: Mapped[UUID]ΒΆ
- invoice_id: Mapped[UUID]ΒΆ
- line_number: Mapped[int]ΒΆ
- line_total: Mapped[Decimal | None]ΒΆ
- quantity: Mapped[Decimal | None]ΒΆ
- sku: Mapped[str | None]ΒΆ
- tax_amount: Mapped[Decimal | None]ΒΆ
- tax_rate: Mapped[Decimal | None]ΒΆ
- unit_of_measure: Mapped[str | None]ΒΆ
- unit_price: Mapped[Decimal | None]ΒΆ
- class app.models.JobStatus(*values)[source]ΒΆ
Bases:
str,Enum- COMPLETED = 'completed'ΒΆ
- FAILED = 'failed'ΒΆ
- PARTIAL = 'partial'ΒΆ
- PENDING = 'pending'ΒΆ
- PROCESSING = 'processing'ΒΆ
- class app.models.ProcessingJob(**kwargs)[source]ΒΆ
Bases:
UUIDPrimaryKeyMixin,Base- bank_statement: Mapped[BankStatement | None]ΒΆ
- completed_at: Mapped[datetime | None]ΒΆ
- created_at: Mapped[datetime]ΒΆ
- document_id: Mapped[UUID]ΒΆ
- error_detail: Mapped[dict[str, Any] | None]ΒΆ
- error_message: Mapped[str | None]ΒΆ
- idΒΆ
- is_reprocess: Mapped[bool]ΒΆ
- max_retries: Mapped[int]ΒΆ
- ocr_confidence_avg: Mapped[float | None]ΒΆ
- ocr_engine: Mapped[str | None]ΒΆ
- ocr_used: Mapped[bool]ΒΆ
- parser_version: Mapped[str | None]ΒΆ
- pdf_encryption_type: Mapped[str | None]ΒΆ
- pdf_password_used: Mapped[bool]ΒΆ
- retry_count: Mapped[int]ΒΆ
- scanned_pages: Mapped[list[int] | None]ΒΆ
- started_at: Mapped[datetime | None]ΒΆ
- updated_at: Mapped[datetime]ΒΆ
- warnings: Mapped[list[dict] | None]ΒΆ
- class app.models.TransactionType(*values)[source]ΒΆ
Bases:
str,Enum- CREDIT = 'credit'ΒΆ
- DEBIT = 'debit'ΒΆ
- FEE = 'fee'ΒΆ
- INTEREST = 'interest'ΒΆ
- TRANSFER = 'transfer'ΒΆ
- UNKNOWN = 'unknown'ΒΆ
- class app.models.Vendor(**kwargs)[source]ΒΆ
Bases:
UUIDPrimaryKeyMixin,BaseNormalized vendor registry.
- canonical_name: Mapped[str]ΒΆ
- country: Mapped[str | None]ΒΆ
- created_at: Mapped[datetime]ΒΆ
- id: Mapped[UUID]ΒΆ
- raw_names: Mapped[list[str]]ΒΆ
- tax_id: Mapped[str | None]ΒΆ
- updated_at: Mapped[datetime]ΒΆ