All Workflows

Sales Quote to Order Matching

Quote and PO extraction + SKU-level reconciliation — sales quote to order matching with six deterministic checks per document pair.

Live demo Drop your sales quote and customer PO together — Cadel extracts both, runs six reconciliation checks, and surfaces any exceptions in seconds.

The Problem

For a mid-market company running 50–200 customer purchase orders per month, sales quote to order matching is rarely a one-click operation — and the cost of getting it wrong compounds across billing, tax, and revenue recognition.

15–25 minutes per PO pair

A deal-desk analyst manually opens the quote PDF, locates the inbound customer PO, compares every line item — SKU, quantity, unit price — checks the PO date against the quote validity window, recomputes the GST-inclusive total, and only then keys the order into the ERP. Across 50 POs, that is two full working days before a single sales order is confirmed.

Four predictable exception classes

Price mismatch (customer PO carries a lower unit price than quoted), quantity mismatch (PO requests more units than the quote approved), expired-quote acceptance (PO arrives after the 30-day validity window), and SKU substitution (customer procurement replaces the quoted part with an unlisted SKU). Each class requires a different escalation path — yet most teams discover these only after an ERP sales order is already created.

Revenue recognition exposure at order-book level

Under Ind AS 115 (converged with IFRS 15), a contract with a customer requires that both parties have approved it and each party's rights and performance obligations are identifiable. Booking a sales order against a mismatched or expired quote puts the underlying contract approval in question — and can force a restatement of revenue recognised in the period. Under ASC 606-10-25-1, Step 1 of the five-step model requires contract identification, and a price or SKU discrepancy is direct evidence that contract terms are not yet agreed.

GST and credit note cascade

Raising a tax invoice on disputed price terms and later issuing a credit note under Section 34 of the CGST Act attracts scrutiny on whether the output tax adjustment was correctly reported in GSTR-1 and matched by the buyer in GSTR-2B — potentially delaying the buyer's ITC claim and straining the commercial relationship. A price_variance of ₹10,000 per unit across a 10-unit order is ₹1,00,000 in disputed revenue that propagates into the next filing period.

2 days

The manual order-confirmation lag for a batch of 50 POs at 15–25 minutes each, before a single sales order reaches the ERP. At scale, this delay cascades into deferred invoicing, distorted accounts-receivable projections, and missed cut-off dates under Section 12 of the CGST Act, which determines the tax point (time of supply) for the period.

Why It Matters: Regulatory Context

Quote-to-order matching sits at the intersection of Indian contract law, GST compliance, and international revenue recognition standards. Four regulatory anchors make structured validation non-optional for finance-controlled companies.

Section 7 · Indian Contract Act, 1872

Acceptance must be absolute and unqualified

A customer PO that states a unit price of ₹1,75,000 against a quoted ₹1,85,000 is technically a counter-offer, not an acceptance. No binding contract exists until the seller acknowledges the revised terms. Treating that PO as a clean sales order without flagging the variance creates a contractual ambiguity that affects both payment-term enforceability and correct GST liability under Section 15 of the CGST Act.

Section 15 · CGST Act, 2017

Transaction value governs GST computation

The value of supply is the transaction value actually agreed between the parties. If the invoice is raised on the quoted price while the customer PO reflects a lower price, the two documents will not reconcile during a GST audit, exposing the supplier to scrutiny under Rule 36 of the CGST Rules. The Price Match check catches this delta before any tax invoice is raised under Section 31.

Ind AS 115 · Para 9

Contract identification as Step 1 of revenue recognition

Ind AS 115, converged with IFRS 15, requires that a contract be approved by both parties and that each party's rights and performance obligations be identifiable before revenue can be recognised. A SKU substitution or unresolved quantity excess means the performance obligation for the additional units has not been established — and recognising revenue on those units in the same period would be premature under the standard's variable consideration guidance.

ICAI SA 230 · Para 8

Audit documentation of order acceptance evidence

SA 230 requires auditors to document the evidence underlying significant assertions, including the existence and completeness of sales orders. A structured quote-to-PO match record — with PASS/FAIL status per check and the specific values compared — satisfies this evidentiary standard directly and supports deal-desk override sign-off without additional reformatting of email-thread evidence.

What This Workflow Automates

Seven deterministic steps from quote PDF + customer PO PDF to a ready-to-book order record — in under 30 seconds per document pair.

01

Document ingestion & type classification

Accepts two PDFs dropped together and identifies each as a Quote or a Customer Po using registered document-type classifiers — no manual tagging required. The system routes each file to the correct extraction schema before any field extraction begins.

02

Quote field extraction

From the quote document, extracts quote_no, quote_date, validity_date, customer_name, line_item_sku, item_description, quantity, unit_price, subtotal, gst_amount, total, and payment_terms — 12 typed fields covering the complete commercial terms of the quotation.

03

Customer PO field extraction

From the customer PO, extracts po_number, po_date, vendor_name, ref_quote_no, line_item_sku, item_description, quantity, unit_price, total, and delivery_date — with ref_quote_no acting as the foreign key that links the PO back to its originating quote.

04

Quote reference & SKU match

Confirms that the PO's ref_quote_no corresponds to a quote present in the uploaded document set (Quote Reference Match), then checks that every PO line-item SKU appears on the referenced quote (SKU Match). A SKU present in the PO but absent from the quote — such as ACM-SRV-X9 against a quote listing only ACM-SRV-X1 — returns FAIL with the unrecognised SKU identified by name.

05

Price & quantity validation

Price Match computes the per-unit variance (PO unit price minus quoted unit price) and returns FAIL if any non-zero difference exceeds Re 1 — surfacing, for example, a ₹10,000 deficit (5.4%) per unit on a ₹1,75,000 PO against a ₹1,85,000 quote. Quantity Within Quote flags any PO quantity that exceeds the quoted volume, noting the surplus units and the percentage overage.

06

Quote validity check

Compares the PO date against the quote's validity_date. If the PO was raised after the validity window closed — as in the scenario where Acme Distribution's PO arrived 45 days after quote issue against a 30-day validity — returns FAIL with the specific expiry date and the number of days elapsed since expiry.

07

Total arithmetic check & order-book export

Recomputes the expected GST-inclusive total from the quote's subtotal and gst_amount (e.g., ₹18,50,000 + ₹3,33,000 = ₹21,83,000) and returns PASS or FAIL against the document-stated total, independent of any cross-document comparison. Pairs with all six checks passing are written to the order-book Excel export as Ready to Book; pairs with any FAIL go to the exception queue.

Edge Cases We Simulate

Five synthetic document pairs exercise every exception class seen in real-world deal-desk data. Each scenario produces a deterministic, auditor-verifiable outcome.

Clean Baseline Match

ScenarioQuote QT-2026-0418 and PO AR-PO-99821 carry identical SKU (ACM-SRV-X1), quantity (10 units), unit price (₹1,85,000), and the PO date falls within the 30-day validity window.
Expected outcomeAll six checks return PASS. Order status is set to Ready to Book and the line item is written to the order-book export without exception.

Price Mismatch

What's wrongAcme Logistics PO AL-PO-44102 (referencing QT-2026-0419) states ACM-SRV-X1 at ₹1,75,000 — ₹10,000 below the quoted ₹1,85,000. The PO total reflects this deviation across the order.
Expected outcomePrice Match returns FAIL with a ₹10,000 per-unit variance (5.4%). Order routed to exception queue with badge Price Dispute — Hold. No sales order created until deal-desk override recorded.

Quantity Mismatch

What's wrongAcme Manufacturing PO AM-PO-71245 (referencing QT-2026-0420) requests 15 units of ACM-SRV-X1, while the quote was issued for 10 units. The PO total includes GST on the excess 5 units at the quoted rate.
Expected outcomeQuantity Within Quote returns FAIL noting a surplus of 5 units (50% above quoted volume). Badge: Quantity Excess — Approval Required. Incremental 5 units not auto-confirmed without revised quote or sign-off.

Expired Quote Acceptance

What's wrongAcme Distribution PO AD-PO-55890 references QT-2026-0388, issued 45 days before the PO date against a 30-day validity window — 15 days past expiry at time of PO receipt.
Expected outcomeQuote Validity returns FAIL with the specific expiry date and days elapsed. Badge: Quote Expired — Re-issue Required. Order blocked until a refreshed quote with updated pricing and validity is uploaded.

SKU Not on Quote

What's wrongAcme Engineering PO AE-PO-30217 (referencing QT-2026-0421) carries SKU ACM-SRV-X9, whereas the referenced quote lists only ACM-SRV-X1. No price or quantity match is possible for the unrecognised SKU.
Expected outcomeSKU Match returns FAIL with message identifying ACM-SRV-X9 as not found on QT-2026-0421. All downstream checks (price, quantity, total arithmetic) marked not-applicable for this line. Badge: Unknown SKU — Quote Amendment Needed.

Missing Quote Reference

What's wrongThe PO's ref_quote_no field is blank or unreadable — there is no document to compare against. This is the upstream failure that makes all six downstream checks not-performable.
Expected outcomeQuote Reference Match returns FAIL immediately; all downstream checks marked not-performed. Badge: Missing Quote Reference — Manual Lookup Required. Operator must link the PO to the correct quote before the match cycle can complete.

Sample Documents

Ten sample files — five quote-and-PO pairs — cover every exception class. Each file is a realistic, multi-page commercial instrument with a cover, parties, line-item schedule with GST summary, standard terms, and acceptance block. Every counterparty is an Acme Corp variant; each PO carries the quote number as its join key.

Clean pair · Quote + PO
Ready to Book

quote_clean.pdf + customer_po_clean.pdf

Acme Industries Pvt Ltd Acme Retail Pvt Ltd
SKUACM-SRV-X1matched
Total₹21.83 Lincl. GST
Checks6 / 6all PASS

Baseline quotation QT-2026-0418 paired with PO AR-PO-99821 at matching SKU, 10 units, ₹1,85,000 unit price, within validity. Demonstrates clean extraction of 12 quote fields and 10 PO fields with all reconciliation checks returning PASS.

Price mismatch · Hold
Exception

customer_po_price_mismatch.pdf

Acme Logistics PO AL-PO-44102 referencing QT-2026-0419
Price delta₹10,000per unit
Variance5.4%below quoted
CheckFAILPrice Match

PO unit price ₹1,75,000 vs quoted ₹1,85,000. Demonstrates Price Match FAIL with the exact per-unit variance surfaced as the exception reason, routing to deal-desk hold before any ERP entry.

Quantity excess · Approval
Exception

customer_po_quantity_mismatch.pdf

Acme Manufacturing PO AM-PO-71245 referencing QT-2026-0420
Excess units+5above quoted 10
Overage50%of quoted qty
CheckFAILQty Within Quote

15 units on PO vs 10 units quoted. Demonstrates Quantity Within Quote FAIL with surplus count noted; incremental 5 units held pending revised quote or explicit sign-off per ASC 606-10-32-11 variable consideration guidance.

Expired quote · Re-issue
Exception

customer_po_expired_quote.pdf

Acme Distribution PO AD-PO-55890 referencing QT-2026-0388
Days past expiry+15 days30-day validity
PO age45 daysfrom quote date
CheckFAILQuote Validity

PO raised 45 days after quote issue against a 30-day validity window. Demonstrates Quote Validity FAIL with precise expiry-date comparison and days-elapsed count surfaced as the exception reason.

Sample Results

Running the workflow against all five demo quote-and-PO pairs produced 10 document extractions — 12 structured fields per quote file and 10 structured fields per PO file. The Total Arithmetic check returned PASS on quote_clean.pdf (subtotal ₹18,50,000 + GST ₹3,33,000 = total ₹21,83,000, confirmed correct). The clean pair (QT-2026-0418 / AR-PO-99821) returned PASS on all six checks and was written to the order-book export as Ready to Book without any manual intervention.

The price-mismatch pair (QT-2026-0419 / AL-PO-44102) surfaced a ₹10,000 per-unit delta (5.4% below quoted price) in the Price Match check — the moment both PDFs were uploaded, before any ERP entry was attempted. The quantity-mismatch pair (QT-2026-0420 / AM-PO-71245) flagged a 5-unit surplus (50% above quoted volume) and correctly held the incremental units pending revised quote or sign-off, consistent with ASC 606-10-32-11 variable consideration guidance. The expired-quote pair (QT-2026-0388 / AD-PO-55890) surfaced a 15-day post-expiry window, with the exact validity_date and days elapsed recorded as the exception reason.

The most operationally significant exception class was the SKU-not-on-quote scenario: the workflow extracted SKU ACM-SRV-X9 from Acme Engineering's PO AE-PO-30217 while the referenced quote QT-2026-0421 carried only ACM-SRV-X1. This single-field mismatch correctly cascaded into five downstream checks being marked not-applicable — price, quantity, validity, total arithmetic, and quote reference cannot be meaningfully evaluated for a line item never quoted — blocking the entire PO from progressing rather than partially passing the recognisable fields. All five exception badges (“Price Dispute — Hold”, “Quantity Excess — Approval Required”, “Quote Expired — Re-issue Required”, “Unknown SKU — Quote Amendment Needed”, “Missing Quote Reference — Manual Lookup Required”) were reproduced deterministically across repeated runs with identical inputs.

Why Automation Wins Here

Replacing the manual quote-to-order comparison with this workflow reduces a 15–25 minute per-pair process to under 30 seconds of extraction and structured validation — with exception triage built into the output, not deferred to a separate review cycle.

15–25 min → 30 s
Per quote-PO pair from manual comparison to validated match result
6 checks
Run deterministically on every pair — not subject to analyst attention or fatigue
12 hrs
Saved per 50-PO batch versus manual document comparison and ERP keying
0
ERP sales orders created on mismatched or expired terms before deal-desk sign-off

Exception triage embedded at receipt

Instead of discovering a price discrepancy only after querying the ERP, the Price Match check returns a specific per-unit variance the moment the two PDFs are uploaded — routing the order directly to the exception queue before any ERP entry is made. This prevents the category of billing disputes that arise when a sales order is confirmed on the wrong price, reducing credit note cycles under Section 34 of the CGST Act.

Revenue recognition evidence, per order

Each run produces a structured order-book export with every extracted field and every check result. The file maps directly to the order-acceptance documentation a controller needs to support Ind AS 115 Step 1 (contract identification) or ASC 606-10-25-1, and it satisfies the evidentiary standard for deal-desk override sign-off under ICAI SA 230 without reformatting email-thread evidence.

Audit-ready order book, month-end ready

The five exception badges provide the status taxonomy for a month-end order-book review file without reformatting — making the document suitable for both internal audit workpapers and external auditor inquiry under SA 505 (External Confirmations) where confirmed order terms are in dispute. Exception overrides are recorded as separate events with user identity and timestamp.

Frequently Asked Questions

The questions deal-desk analysts and finance controllers ask most often before deploying purchase-order matching automation.

Which documents do I upload?

Upload two PDFs per deal — your outbound sales quote and the customer's purchase order that references it. Cadel classifies each file as a Quote or a Customer Po automatically, so you can drop them together. Each sample file is a realistic multi-page commercial instrument with a cover page, line-item schedule, GST summary, standard terms, and a signature block. No manual tagging or template configuration is required.

Which checks does the workflow run, and are they deterministic?

Six checks per quote–PO pair: Quote Reference Match (the PO's ref_quote_no matches a known quote), SKU Match (each PO line SKU exists on the quote), Price Match (PO unit price equals the quoted price within Re 1), Quantity Within Quote (PO quantity does not exceed the quoted volume), Quote Validity (PO date is on or before the quote's validity date), and Total Arithmetic (subtotal + GST = total). Every check is rule-based and deterministic — the same inputs always return the same PASS or FAIL with no probabilistic scoring.

How are exceptions classified?

Each failed check is surfaced in the Exceptions view with the specific rule that tripped and the values compared — for example a ₹10,000 per-unit price variance (5.4%) or a 5-unit quantity excess (50% above quoted volume). Price, quantity, and SKU failures route to a hold; a lapsed validity date blocks order creation until a fresh quote is uploaded. Exception overrides are recorded as separate events with user identity and timestamp, supporting ICAI SA 230 documentation requirements.

What happens when a customer PO arrives without a quote reference?

If the PO's ref_quote_no field is blank or unreadable, Quote Reference Match returns FAIL immediately and all downstream checks — SKU, price, quantity, validity, and total arithmetic — are marked not-performed, because there is no document to compare against. The order is placed in the exception queue with badge Missing Quote Reference — Manual Lookup Required. The deal-desk operator must manually link the PO to the correct quote number before the workflow can complete the match cycle.

Does the workflow handle GST correctly for Indian companies?

The quote's gst_amount is extracted and the Total Arithmetic check verifies that subtotal + gst_amount = total before any tax invoice is raised under Section 31 of the CGST Act, 2017. The workflow does not independently re-derive the CGST/SGST/IGST split — confirm the applicable HSN code and GST rate in your ERP before issuing the final invoice. Any arithmetic inconsistency in the quote itself is surfaced as a Total Arithmetic FAIL before the PO comparison is run.

How does it integrate with Tally, SAP, or other ERPs?

Cadel produces an Excel export of the matched order book — one row per PO line with PO number, quote number, SKU, quantity, unit price, total, exception type, and status badge. This file can be imported into Tally Prime using the standard Sales Order voucher import template, or into SAP S/4HANA via LSMW or a custom BAPI_SALESORDER_CREATEFROMDAT2 call. For NetSuite users, the export maps directly to the Sales Order CSV import format. No direct API connector is required for mid-market deployments.

What audit trail does each run leave?

Every upload creates an immutable, timestamped extraction record with filename, document type, and all extracted field values. Every reconciliation run logs the six check results — PASS, FAIL, or not-performed — with the specific values compared and the reason for any deviation. Exception overrides (e.g., a deal-desk approval on a price mismatch) are recorded as separate events with user identity and timestamp. The trail supports ICAI SA 230 (Audit Documentation) and exports as a PDF or JSON package for attachment to working papers or external auditor inquiry.

Can the workflow handle multi-currency POs?

Not yet. Price Match compares numeric values directly without currency conversion; a PO amount in USD will produce a spurious FAIL if compared to an INR quote amount. For multi-currency scenarios, ensure the quote and PO are both denominated in the same currency before uploading, or upload a currency-converted version of the PO. Native multi-currency support with RBI reference rate conversion is on the Cadel product roadmap.