Dovahkiin — AI-enabled
Technical work sample
RFQ matching & review

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 tests
A demonstration, not a customer case study. All data is invented. This is a CSV matching component, not a complete RFQ system. It does not send quotations; every output needs human review before real use.

A 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

Reading the output: selected results, not a quotation
ResultShown priceWhat it means
Exact match example3 × DKK 12.50 = DKK 37.50Code and unit match; a draft line total is available.
Second draft-ready lineDKK 0.03 line totalThe sample also exercises decimal rounding.
Five review holdsNo unit price or totalRead 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.

Python source · Test suite

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.

Next step

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

dovahkiin@roamingmindshouse.com