Identifies and interprets tables and forms; extracts rows, key-value fields, and nested schemas.
The harder subset of parsing. Tables carry meaning in their structure — a value means one thing in one column and another in the next — so recovering the grid correctly matters as much as reading the characters. Forms add the complication that a label and its value are related by position rather than by markup.
The payload is genuinely tabular: statements, schedules, remittance advice, price lists. Multi-page tables with repeating headers are the case that justifies the specialised approach.
Tables that arrive as data anyway. If the sender can provide CSV or an API, parsing their PDF rendering of it is self-inflicted work.
Row and column totals should be recomputed from extracted cells and compared against any stated totals. A table that extracts cleanly but does not foot has not been understood.
Merged cells and missing gridlines produce a shifted grid, so every value lands one column out. Individually each value looks valid; collectively the table is nonsense.
A bank statement in PDF, where the running balance column must be recovered correctly or every transaction is attributed to the wrong date. Recomputing the balance chain from extracted debits and credits catches the shift immediately.