Match the clear lines.
Flag the exceptions.
Before a request for quotation becomes a quote, each line needs a catalogue match and a usable price. This small demonstration separates exact matches from lines that need a person’s decision.
See the sample outputSource & reproducible testsA deliberately narrow workflow
1. Read the inputs
A structured request CSV and a catalogue CSV supply item codes, units, quantities, prices and price-source labels.
2. Match or hold
Match by code and unit. Unknown codes, incompatible units, duplicate matches and invalid values are held for review rather than assigned a price.
3. Review the draft
Inspect line totals and explicit hold reasons in the output CSV. A ready status is not approval to issue a quote.
What the example produces
In the included seven-line synthetic request, two lines are ready for a quote draft and five are held for human review. Prices are withheld on held lines.
7request lines
2draft-ready lines
5review holds
| Result | Shown price | What it means |
|---|---|---|
| Exact match example | 3 × DKK 12.50 = DKK 37.50 | Code and unit match; a draft line total is available. |
| Second draft-ready line | DKK 0.03 line total | The sample also exercises decimal rounding. |
| Five review holds | No unit price or total | Read each row’s review reason before resolving it. |
Inspect the complete output CSV · Request CSV · Catalogue CSV
DKK is fixed for this sample. Price-source labels are retained for traceability, not authenticated or checked for freshness.
Evidence you can inspect
The dependency-free Python source and tests are included. The September 16, 2026 local run passed 14 tests. These are local test results, not independent certification or evidence of production performance.
Reproduce the result
Download the source, tests, request and catalogue into one directory. With Python 3 installed, run:
python3 -m unittest -v test_matcher.py python3 matcher.py --request request.csv --catalogue catalogue.csv --output draft.csv
The second command creates or overwrites draft.csv. No third-party packages or network access are needed.
Where this sample stops
No PDF/OCR extraction, n8n workflow, Excel integration or quotation delivery is included. There is no authentication, VAT, discounts, shipping, currency conversion or catalogue-freshness validation.
Matching and validation limits
Inputs must follow the supplied CSV schemas; malformed files do not have a polished validation interface. Matching trims whitespace and ignores case, but does not resolve contradictory descriptions, substitute products or convert units. Fractional quantities are allowed, even where a real process might require whole units.
Arithmetic uses bounded decimals and half-up line-total rounding. A basic CSV formula-prefix safeguard is included, but is not a comprehensive spreadsheet-security guarantee. Passing the tests does not establish exhaustive correctness.
Is matching and exception review your bottleneck?
Email a short description of your current input, desired output and the exception that takes the most time. Please do not send confidential files, personal data or credentials at this stage.
I can then assess whether a separately scoped component is a fit. Any paid work would need an agreed scope, deliverables, price and acceptance checks before it begins. This sample is not a fixed-price offer or a promise of a complete integration.
Discuss your workflow