RRep. Keith Self (TX3)· filed 06/30/26Clerk PDF
Each row the reader counted as a transaction is boxed and the cell it read as ticked is washed — blue for a buy, orange for a sell, grey for an exchange; its column on the form is the direction, and the table beside it says it in words. A row with no tick or more than one is outlined dashed and stored as unknown, never guessed.
Overlay: each row the reader counted as a transaction is boxed; its amount and type column edges are drawn; the cell it read as ticked is filled — blue for a buy, red for a sell, grey for an exchange, and the amount cell in the sequential colour. A row with no tick or more than one is outlined dashed and listed as unknown; it is stored as unknown, never guessed. The margin is how far the strongest cell stood above the row’s median ink; boxed forms need 0.15. The row number links to the row, so a URL with ?page=N#row-M lands on it.
Transcription: the asset, date, owner and bracket are the stored transaction, which took its amount and type from the grid. Where the model read a different letter or type the row says so — the grid was kept, and a filing with more than one type disagreement is refused rather than joined. A row’s status is the reader’s own.
Re-capturing after a reader change: capture-scans skips a filing that already has pages, so a changed reader does not refresh this view by itself. Delete this filing’s pages — sqlite3 data/trades.sqlite3 "DELETE FROM scan_pages WHERE filing_id = 326" — and run python -m whale capture-scans again: pages and rows are stored afresh and re-linked to the transactions by order (no links, not wrong ones, if the counts no longer match). The transactions are untouched. Page images are cached for a week, so a hard reload may be needed to see the new capture.