feature/Invoice-currency-lines · L-261107-0c6dcb
Merged
LC
4h ago+112+112+012345678901234567890123456789-7-7-0123456789
TL;DR
invoice_extractionnow returns each invoice's currency, as an ISO 4217 code, and its purchase line by line, so a page built on its result can print "$9.96" and list what was bought.- A wrong currency is worse than a missing one, so the currency is read only from what the document shows for its own totals and lines, and left empty when nothing settles it.
vat_ratesnow always reads as percentages (20 for 20 %): a caller that computed with fractions must divide by 100, so the release that carries this is a minor.
Behaviour changes
Invoicehad no currency →currency, the ISO 4217 code of the currency its totals and lines are expressed in. It is taken from a code given for those amounts, then from a symbol naming one currency only (€, ₹), then, for a shared symbol ($, £, ¥, kr), from where the document was issued. A converted amount or a card payment in another currency is never used, and the field stays empty when nothing settles it.- The purchase was one free-text
description→line_items, a list of the newInvoiceLineItem(labelrequired;quantity,unit_priceandamountas printed). It holds every priced line in the order printed: fees, surcharges and discounts are included wherever they are printed, and the subtotal, tax, total, payment and per-category subtotal lines are never included. descriptionwas a free description of the goods → a one-line summary of the purchase.vat_rateswas left to the model,0.2or20→ percentages,20for 20 %.
Breaking changes
vat_rateskeeps its type and changes its meaning for a caller who received fractions. A caller that moves its address fromv0.2.0and multiplies an amount by a rate must divide the rate by 100 first. The changelog marks it "(Breaking)", and the next release isv0.3.0.
Changes
methods/invoice_extraction/invoice_extraction.mthds:- the new
InvoiceLineItemconcept; currencyandline_itemsonInvoice;- the amounts' descriptions say they are in the invoice's currency;
vat_ratesanddescriptionredefined;- the
extract_invoice_dataprompt gains a currency rule, a line-item rule and a one-line description rule. The model alias and the inputs are unchanged.
- the new
methods/invoice_extraction/README.md, the library's first package README: what the method takes and returns, every field, how the currency is determined, which lines are line items.- The root
README.md's method table row andCHANGELOG.md's[Unreleased]section.
How it was verified
plxt fmt --checkandplxt lintover the package, andpipelex validate bundle methods/invoice_extraction/on Pipelex 0.95.1 and 0.97.0 with the README in the package directory.- Python types generated with
pipelex codegen types … -t python-pydantic:InvoiceLineItemis its own model withlabel: str,line_itemsislist[InvoiceLineItem] | None, andcurrencyisstr | None. - Live runs on the hosted API, from the cookbook's assets at
v0.18.0, repeated after each round of fixes:- the package's own sample, the JFK 5B Food Hall receipt, which prints no address:
USD, and three lines (3.99, 4.89, and the 0.27 surcharge printed below the subtotal); - a Johnny Rockets receipt:
USD, two lines, with its "Food" and "NA Bev" category subtotals left out; - a House of Blues card slip:
USDfrom its printed code, no lines, and its suggested-tip table not read as lines.
- the package's own sample, the JFK 5B Food Hall receipt, which prints no address:
Documentation
The package README, the concept's field descriptions (which reach codegen's docstrings and every form descriptor), the root README's method row, and the changelog.
Not done
- A multi-page invoice still returns one
Invoiceper page, as the method always has. Grouping pages is a change to the output's multiplicity, left until a consumer needs it. - No live run covered a euro document or a shared symbol with nothing to settle it: no cookbook asset is one.
- The consumers move separately: the cookbook's CSV batch recipe once
v0.3.0is tagged (L-261107-9ac36b), and mthds-form's invoice result fixture (L-261107-a285d0).
Closes L-261107-0c6dcb
🤖 Generated with Claude Code
https://claude.ai/code/session_019TF9N18ABj9hxXJX1vChAU
Summary by cubic
invoice_extraction now returns each invoice's currency as an ISO 4217 code and lists the purchase line by line, so a page built on its result can print "$9.96" and list what was bought.
Behavior changes
currencyis read only from what the document shows for its own totals and lines, in this order: a code, then a one-currency symbol like € or ₹, then, for shared symbols like $, £ or kr, where the document was issued; it is left empty when nothing settles it, and a converted amount or card payment in another currency is never used.line_itemsholds every priced line in printed order, fees and discounts included, as the newInvoiceLineItem; the subtotal, tax, total and payment lines are never included.descriptionbecomes a one-line summary, and the package gains a README describing its output.
Breaking change
vat_ratesnow reads as percentages (20 for 20 %); a caller that computed with fractions must divide the rate by 100 first, and the next release isv0.3.0.