Impl
pipelines.extraction.pdf.impl
Summary
Concrete pdf-family implementations.
The pdf family is the OCR text chain; each concrete class REDECLARES its port
slots with CONCRETE types — this pinned typing is what informs the ports to be
used, exactly as in the old pipelines/extraction_pipeline_impl.py.
This models the real domain/extraction pdf path as a hexa composition tree:
- ImplDatePort : port of domain.extraction.ports.date.DatePort
- ImplBucketFinderPort: port of BucketFinderAdaptor.get_opening_balance_buckets
- ImplSplitterPort : port of TransactionSplitterAdaptor.split_blocks
- ImplTransactionParserPort: port of TransactionParserAdaptor.parse
- ImplRawLinesPort : port of PdfRawLinesAdaptor (ocr_all_pages + normalize)
Classes
ImplAmbiguityPort
Bases: AmbiguityPort, AmbiguityHandler
Concrete ambiguity leaf — delegates to AmbiguityHandler.
Initialize the ambiguity handler.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
fetch_request_id |
str
|
Identifier correlating this resolution to a
fetch request. Defaults to |
''
|
pause_on_ambiguity |
bool
|
Whether to raise |
True
|
resolved_choices |
Optional[dict]
|
Prior choices keyed by candidate
key. Defaults to |
None
|
resolver |
Optional[Callable]
|
Optional resolver hook. Defaults to
|
None
|
Functions
resolve_ambiguity
Resolve ambiguity via AmbiguityHandler.resolve_ambiguity.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
line |
Raw transaction line. |
required | |
ocr_amount |
OCR amount. |
required | |
ocr_balance |
OCR balance. |
required | |
prev_balance |
Previous transaction balance. |
required | |
candidates |
Candidate (amount, balance) pairs; default |
None
|
Returns:
| Type | Description |
|---|---|
|
Set with the chosen pair, or |
ImplAmountBalancePort
Bases: AmountBalancePort
Concrete amount/balance leaf — resolves via ResolutionContext.
Attributes:
| Name | Type | Description |
|---|---|---|
number |
ImplNumberPort
|
Number extraction leaf. |
ambiguity |
ImplAmbiguityPort
|
Ambiguity resolution leaf. |
handler |
Optional[AmbiguityHandler]
|
Optional override handler. |
trust_fallback |
Optional[str]
|
Fallback policy. |
Functions
adjust_balance
Adjust an OCR balance (no-op base).
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
balance |
float
|
OCR balance. |
required |
line |
str
|
Transaction line. |
required |
Returns:
| Name | Type | Description |
|---|---|---|
float |
float
|
The balance, unmodified. |
missing_number_candidates
Provide candidates for one-number lines (no-op base).
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
ctx |
The active |
required |
Returns:
| Type | Description |
|---|---|
|
None. |
resolve
Resolve (amount, balance) via ResolutionContext.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
amount |
OCR amount. |
required | |
balance |
OCR balance (adjusted first). |
required | |
prev_balance |
Previous transaction balance. |
required | |
line |
Raw transaction line. |
required | |
numbers |
Extracted numbers; default None. |
None
|
Returns:
| Type | Description |
|---|---|
|
(signed amount, resolved balance) tuple. |
ImplBucketFinderPort
Bases: BucketFinderPort
Concrete bucket finder — splits raw lines at B/F and opening markers.
Attributes:
| Name | Type | Description |
|---|---|---|
number |
ImplNumberPort
|
Number extraction leaf. |
Functions
get_opening_balance_buckets
Divide raw lines into opening-balance buckets.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
lines |
Raw text lines. |
required | |
limit_first |
Keep only the first bucket. |
False
|
|
line_offset |
Offset added to starting indices. |
0
|
Returns:
| Type | Description |
|---|---|
|
List of |
ImplDatePort
Bases: DatePort
Concrete date leaf: parse, split, reconcile, and reorder dates.
Functions
get_dates
Extract the leading date and text tail from a line.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
line |
str
|
Text line. |
required |
Returns:
| Type | Description |
|---|---|
Optional[Tuple[str, str]]
|
Optional[Tuple[str, str]]: |
parse_date
Parse DD-MM-YYYY (or DD/MM/YYYY) into a date.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
date_str |
str
|
Date string. |
required |
Returns:
| Type | Description |
|---|---|
date
|
datetime.date: The parsed date. |
reconcile_date
Reconcile an OCR date against the previous transaction date.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
date_str |
str
|
OCR date string. |
required |
prev_date_str |
Optional[str]
|
Previous transaction date string. |
required |
Returns:
| Name | Type | Description |
|---|---|---|
str |
str
|
Reconciliated date as |
reconcile_date_full
Reconcile a date string against a full reference date.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
date_str |
str
|
OCR date string. |
required |
prev |
date
|
Previous transaction date. |
required |
Returns:
| Type | Description |
|---|---|
Optional[str]
|
Optional[str]: Reconciliated |
reconcile_date_partial
Reconcile a partial MM-YYYY date against a reference date.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
date_str |
str
|
Partial OCR date string. |
required |
prev |
date
|
Previous transaction date. |
required |
Returns:
| Type | Description |
|---|---|
Optional[str]
|
Optional[str]: Reconciliated |
reorder_lines_by_date
Move the dated line to the front of a transaction block.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
txn_lines |
List[str]
|
Transaction block lines. |
required |
Returns:
| Type | Description |
|---|---|
List[str]
|
List[str]: Reordered lines. |
Raises:
| Type | Description |
|---|---|
ValueError
|
When no dated line is present in the block. |
split_line_by_date
Split a merged line into segments at date boundaries.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
line |
str
|
Possibly merged OCR line. |
required |
Returns:
| Type | Description |
|---|---|
List[str]
|
List[str]: Line segments split at date boundaries. |
ImplDescPort
Bases: DescPort
Concrete description leaf — slices at the first starter marker.
Attributes:
| Name | Type | Description |
|---|---|---|
starters |
Optional[List[str]]
|
Description starter markers. |
Functions
extract_description
Extract and clean the transaction description.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
description |
str
|
Raw description text. |
required |
Returns:
| Name | Type | Description |
|---|---|---|
str |
str
|
Cleaned description. |
Raises:
| Type | Description |
|---|---|
NotImplementedError
|
When no starters are configured. |
fix_ocr
Fix OCR artifacts in the description text (no-op base).
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
text |
str
|
Text to fix. |
required |
Returns:
| Name | Type | Description |
|---|---|---|
str |
str
|
Fixed text. |
ImplNumberPort
Bases: NumberPort
Concrete number leaf — prefers trailing decimals, else the last numbers.
Functions
get_numbers
Extract monetary numbers, preferring trailing decimals.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
line |
str
|
Text line to scan. |
required |
Returns:
| Type | Description |
|---|---|
List[float]
|
List[float]: Cleaned monetary numbers. |
get_opening_balance
Return the last number as the opening balance.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
line |
str
|
Text line to scan. |
required |
Returns:
| Type | Description |
|---|---|
Optional[float]
|
Optional[float]: The last number, else |
ImplPDFExtractionPipeline
Bases: PDFExtractionPipeline
Concrete pdf graph root.
Attributes:
| Name | Type | Description |
|---|---|---|
pipeline |
str
|
Pipeline tag ("heuristic"). |
trust_fallback |
Fallback policy for amount/balance trust. |
|
ingest |
ImplIngestPort
|
Ingest stage. |
raw_lines |
ImplRawLinesPort
|
Raw-lines stage. |
txn_blocks |
ImplTxnBlocksPort
|
Txn-blocks stage. |
txn_dicts |
ImplTxnDictsPort
|
Txn-dicts stage. |
raw_expense |
ImplRawExpensePort
|
Terminal raw-expense stage. |
Functions
run
Run the pdf extraction chain end-to-end.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
source |
Raw extraction source. |
required |
Returns:
| Type | Description |
|---|---|
|
List of raw expense records. |
ImplRawLinesPort
Bases: RawLinesPort
Concrete raw-lines leaf — OCRs PDF bytes into text lines.
Attributes:
| Name | Type | Description |
|---|---|---|
covert_to_image |
bool
|
Binarize pages via image conversion. |
Functions
extract
Extract raw OCR text lines from content.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
content |
PDF bytes, Content, or dict payload. |
required |
Returns:
| Type | Description |
|---|---|
|
List of raw text lines. |
Raises:
| Type | Description |
|---|---|
TypeError
|
When content is not PDF bytes or Content with |
ImplSplitterPort
Bases: SplitterPort
Concrete splitter — splits bucket lines into transaction blocks.
Attributes:
| Name | Type | Description |
|---|---|---|
number |
ImplNumberPort
|
Number extraction leaf. |
date |
ImplDatePort
|
Date parsing leaf. |
Functions
split_blocks
Split bucket lines into transaction blocks.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
lines |
Bucket lines. |
required | |
has_header |
Whether a header precedes the rows. |
False
|
|
min_numbers |
Minimum numbers for a split. |
3
|
|
detect_date_ranges |
Detect date-range lines. |
False
|
Returns:
| Type | Description |
|---|---|
|
List of transaction block texts. |
ImplTransactionParserPort
Bases: TransactionParserPort
Concrete transaction parser — one block to one txn dict.
Attributes:
| Name | Type | Description |
|---|---|---|
number |
ImplNumberPort
|
Number extraction leaf. |
date |
ImplDatePort
|
Date parsing leaf. |
desc |
ImplDescPort
|
Description extraction leaf. |
amount_balance |
ImplAmountBalancePort
|
Amount/balance resolution leaf. |
Functions
parse
Parse a transaction block into a txn dict.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
txn_text |
Transaction block text. |
required | |
prev_date_str |
Previous transaction date string. |
required | |
prev_balance |
Running balance from the previous transaction. |
required |
Returns:
| Type | Description |
|---|---|
|
Txn dict, or |
ImplTxnBlocksPort
Bases: TxnBlocksPort
Concrete txn-blocks stage — buckets plus per-bucket splitting.
Attributes:
| Name | Type | Description |
|---|---|---|
bucket_finder |
ImplBucketFinderPort
|
Bucket-finding leaf. |
splitter |
ImplSplitterPort
|
Block-splitting leaf. |
Functions
extract
Extract txn blocks keyed by opening balance.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
raw_lines |
Raw OCR text lines. |
required |
Returns:
| Type | Description |
|---|---|
|
Dict[float, List[str]]: Opening balance → block texts. |
ImplTxnDictsPort
Bases: TxnDictsPort
Concrete txn-dicts stage — parses blocks in balance-chained order.
Attributes:
| Name | Type | Description |
|---|---|---|
parser |
ImplTransactionParserPort
|
Transaction parsing leaf. |
Functions
extract
Extract balance-chained txn dicts from blocks.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
txn_blocks |
Opening balance → block texts. |
required |
Returns:
| Type | Description |
|---|---|
|
List of txn dicts. |
Functions
clean_num
Port of domain.extraction.ports.pdf.clean_num.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
s |
str
|
Numeric string to clean. |
required |
Returns:
| Name | Type | Description |
|---|---|---|
float |
float
|
Parsed numeric value; |
normalize
Normalize OCR text: fix artifacts, strip separators, drop commas.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
text |
str
|
Raw OCR text. |
required |
Returns:
| Name | Type | Description |
|---|---|---|
str |
str
|
Normalized text. |
ocr_all_pages
Run OCR over every PDF page, returning per-page text.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
pdf_bytes |
bytes
|
PDF file bytes. |
required |
covert_to_image |
bool
|
Binarize pages through image conversion. |
None
|
Returns:
| Name | Type | Description |
|---|---|---|
list |
list
|
One OCR text string per page. |
Raises:
| Type | Description |
|---|---|
ImportError
|
When pytesseract/Pillow are unavailable. |
rasterize_pdf
Rasterize PDF bytes into JPEG page images via pdftoppm.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
pdf_bytes |
bytes
|
PDF file bytes. |
required |
out_dir |
str
|
Directory to write the PDF and page images. |
required |
dpi |
int
|
Render resolution. Defaults to 300. |
300
|
Returns:
| Name | Type | Description |
|---|---|---|
list |
list
|
Sorted list of generated JPEG page paths. |