← All Tools Open Tool →

📋 Purchase Rate Comparison
& Audit Annexure Generator

Upload a PO Register, map columns once, and instantly identify items procured from multiple suppliers in the same month at above-minimum rates — with excess cost quantified and audit annexures ready to export.

📂 Excel / .xlsx input
🔍 Exception Flagging
₹ Excess Cost Calc
📋 Audit Annexure
⬇ 3 Export Modes

📌 What This Tool Does

In procurement audits a common risk is paying different rates to different suppliers for the same item in the same period. This tool automates that comparison — parsing your PO Register, grouping by Item Code × Month, identifying the lowest available rate, and flagging every row where a higher rate was paid when a cheaper source existed that month.

The output is a structured Audit Annexure pairing each exception with its lowest-rate counterpart, plus a complete Working Sheet with all calculated columns preserved in original row order — ready to attach to an internal audit report.

Entirely browser-based. Your PO Register is processed locally — no data is uploaded to any server. Works offline after the page loads.

📂 Input File Format

Upload a PO Register as an .xlsx or .xls file. The file can have multiple sheets — you choose which sheet to read. Column headers can be in any row (configurable); rows above the header row are ignored.

Mandatory Columns

All eight columns below must be present (names do not need to match exactly — the tool auto-guesses and you confirm).

Column Label in Tool What It Should Contain Auto-matched Aliases Required
PoNo Purchase Order number / reference PO No, PO Number, Purchase Order Yes
PoDate Date the PO was raised PO Date, po_date Yes
Supplier Code Unique supplier identifier SupplierCode, Vendor Code Yes
SupplierName Supplier / vendor name Supplier Name, Vendor Name Yes
Item Code Unique item / material code ItemCode, Material Code Yes
ItemDescription Human-readable item name Item Description, Description Yes
Price Unit rate (numeric) Rate Yes
Sum of Po.Qty Quantity ordered (numeric) Quantity, Qty, PO Qty Yes

Optional Columns

These columns pass through to the Working Sheet and can be used as filters. If your file does not have them, select "— Not Available —" in the dropdown — the tool works fine without them.

Column Label Typical Use Required
Key1 Any classification — plant, location, department, etc. Optional
ItemType Category or type of item Optional
Key2 Any secondary classification Optional
⚠️
Rows that are skipped: Any row where PoDate cannot be parsed, Price is non-numeric or zero, or Item Code is blank will be skipped and counted separately in the Dashboard.

🚀 Step-by-Step Usage Guide

1

Upload Your PO Register

Drag and drop your Excel file onto the upload zone, or click to browse. Supported formats: .xlsx, .xls. Once uploaded, a sheet explorer appears — click the correct sheet tab to preview its data.

  • If your header row is not Row 1, change the Header Row setting (default: 1).
  • The preview table shows the first few rows so you can confirm the right sheet is selected.
2

Map Mandatory & Optional Columns

The tool auto-guesses column mappings based on common naming conventions. Verify each dropdown before running — particularly Price, Item Code, and PoDate.

  • All 8 mandatory columns must be mapped to a column from your file.
  • For optional columns (Key1, ItemType, Key2) — select "— Not Available —" if your file does not have them.
  • Optional filter dropdowns (Key1, ItemType) only appear in the Results panel when those columns are mapped.
3

Run Analysis

Click Run Analysis. The tool processes all rows and immediately shows the Exception Dashboard, Working Sheet, Audit Annexure, and Top 10 Exceptions tabs. Use the filters to drill into specific months, suppliers, or item codes.

4

Export

Choose from three export buttons depending on what you need for your audit file. Exports are always unfiltered (full dataset) regardless of active filters — preserving a complete audit trail.

📊 Dashboard Metrics

The dashboard appears at the top of the Results panel and gives an at-a-glance summary of the analysis.

MetricDescription
Total Records Valid rows processed (excludes skipped rows)
Exception Records Rows where the item was bought from multiple suppliers in the same month and this row's rate was above the month's lowest available rate
Total Potential Excess Cost Sum of (Price − Lowest Rate) × Qty across all exception records — i.e., the total that could have been saved had the lowest rate been used
Rows Skipped Rows excluded due to invalid date, non-numeric price, or blank Item Code
Highest Impact Exception

Below the four stat cards, the tool highlights the single exception with the largest Excess Cost — showing the PO number, Item Code, Item Description, both supplier names, their respective prices, and the excess cost amount. If no exceptions are found, a green "No Exceptions Found" message appears instead.

📄 Working Sheet

The Working Sheet preserves every valid row from the original PO Register in its original row order — no grouping or sorting is applied. Seven calculated columns are appended to the right of the original data.

ColumnOriginDescription
PoNoSourceAs-is from your file
PoDateSourceDisplayed as DD-Mon-YYYY
MonthCalculatedDerived from PoDate — e.g. Mar-26. Used for grouping.
Supplier CodeSourceAs-is
SupplierNameSourceAs-is
Key1Source / blankOnly populated if column was mapped
ItemTypeSource / blankOnly populated if column was mapped
Key2Source / blankOnly populated if column was mapped
Item CodeSourceAs-is
ItemDescriptionSourceAs-is
PriceSourceUnit rate
Sum of Po.QtySourceQuantity ordered
Lowest RateCalculatedMinimum Price among all suppliers for the same Item Code in the same Month
Lowest SupplierCalculatedSupplierName corresponding to the Lowest Rate
Rate DiffCalculatedPrice − Lowest Rate (zero for non-exceptions)
Excess CostCalculatedRate Diff × Sum of Po.Qty
Flag Calculated Exception when: (a) the item appears with 2+ different suppliers in the same month, AND (b) this row's Price > Lowest Rate.
Blank otherwise.
ℹ️
Rows that are the lowest-rate record for their group are not flagged as exceptions — even if the same item appears with higher-rate POs. The Flag column is blank, Rate Diff is 0, and Excess Cost is 0 for those rows.

📋 Audit Annexure

The Audit Annexure is structured for direct inclusion in an internal audit report. Each exception group consists of two types of rows:

Lowest Rate record — the reference baseline. Shows the cheapest PO for the item in that month, with Rate Diff and Excess Cost shown as zero.
Exception record(s) — one row per PO that paid above the lowest rate. Shows the rate differential and the resulting excess cost.
ColumnDescription
Group NoSequential group number — each unique Month + Item Code pair gets one Group No
Record TypeLowest Rate or Exception
PoNoPurchase Order number
SupplierSupplier name
Item CodeItem / material code
Item DescriptionItem name
PriceUnit rate paid in this PO
QtyQuantity ordered
Lowest RateThe baseline minimum rate for this item in this month
Lowest SupplierSupplier providing the lowest rate
Rate DiffPrice − Lowest Rate (0 for Lowest Rate rows)
Excess CostRate Diff × Qty (0 for Lowest Rate rows)
⚠️
If no exceptions are found, the Annexure tab will be empty and Export Annexure will show a prompt informing you of this. This is expected — it means no multi-supplier rate discrepancies were detected in the data.

🏆 Top 10 Exceptions

The Top 10 Exceptions tab ranks exception records by Excess Cost (descending) and shows the ten highest-impact procurement anomalies. This view is unaffected by filters — it always shows the top 10 across the full dataset so the highest-risk items are never hidden.

🔍 Filters

The filter bar appears above the data tabs in the Results panel. All filters apply simultaneously (AND logic) to the Working Sheet and Audit Annexure views.

FilterValuesNotes
Month All, or any month present in data (e.g. Mar-26) Always shown
Supplier All, or any supplier name Always shown
Item Code All, or any Item Code Always shown
Key1 All, or any Key1 value Only shown if Key1 was mapped
ItemType All, or any ItemType value Only shown if ItemType was mapped
Exception Only Checkbox — when checked, Working Sheet shows only rows where Flag = Exception Does not affect Top 10 tab
ℹ️
In the Annexure view, when filters are active, a group is included only if at least one of its Exception rows matches the filter — but the paired Lowest Rate row for that group is always included alongside it to maintain context.

Export Options

Three export buttons are available. All exports use the full, unfiltered dataset to maintain a complete audit trail — active filters do not restrict exports.

Export Working

Single-sheet workbook with all valid rows and all 17 calculated columns.

1 SHEET
Working

Export Annexure

Single-sheet workbook with the structured exception pairs grouped by Group No.

1 SHEET
Annexure

Export Complete Audit File

Full audit package — three sheets in one workbook, ready to attach to the audit report.

3 SHEETS
Working
Annexure
Summary

Summary Sheet (Complete Audit File only)

ParticularsDescription
Total Records ProcessedCount of valid rows included in the analysis
Total ExceptionsCount of rows flagged as Exception
Total Potential Excess Cost (₹)Sum of Excess Cost across all exceptions
Highest Exception Amount (₹)Largest single Excess Cost value

⚙️ Analysis Logic (Step by Step)

Parse & Validate Rows

Each row is checked: PoDate must be a recognisable date, Price must be a non-zero number, Item Code must not be blank. Invalid rows are skipped and counted in "Rows Skipped".

Derive Month

The Month column is computed from PoDate as Mon-YY (e.g. Mar-26). This is the primary grouping unit — two POs with different PoDate values in the same calendar month are treated as the same period.

Group by Month × Item Code

All rows with the same Item Code in the same Month are placed in one group. Items that appear with only one supplier in a month are never flagged — there is no comparison available.

Identify Lowest Rate

Within each group, the row with the minimum Price is the Lowest Rate record. Its supplier becomes the Lowest Supplier for the entire group. If two rows share the same minimum price (a tie), neither is flagged — the tied rows are both treated as the Lowest Rate baseline.

Flag Exceptions & Calculate Excess Cost

A row is flagged Exception when:
① the group has more than one record (multi-supplier month), AND
② this row's Price > Lowest Rate.
Rate Diff = Price − Lowest Rate
Excess Cost = Rate Diff × Sum of Po.Qty

Build Annexure

For each exception group, one Lowest Rate context row is written first, followed by all its paired Exception rows. Groups are numbered sequentially starting from 1. The Working Sheet retains original row order.

⚠️ Auditor Disclaimer

⚠️

Important — For Auditor Review

This tool identifies rate-based exceptions only. A higher rate paid to one supplier does not automatically constitute a procurement irregularity. Before drawing audit conclusions, the responsible auditor must consider all non-rate factors, including:

  • Technical specifications and product differences between suppliers
  • Brand, quality grade, or material composition variations
  • Urgent procurement requirements (emergency orders)
  • Freight, delivery, and logistics cost implications
  • Approved vendor lists and vendor qualification constraints
  • Management approvals and sanctioned deviations
  • Contractual obligations, rate contracts, or annual agreements

The output of this tool is working paper material to assist audit analysis — not a final audit finding. All exceptions should be discussed with the relevant procurement and management teams before formal reporting.

FAQ

My column names are different from the labels in the tool. Will it still work?
Yes. The tool auto-guesses mappings using common aliases, then lets you confirm or change each dropdown. As long as your file has columns containing the right data, the names do not need to match.
An item was bought from the same supplier twice in a month at different rates. Is that flagged?
Only if another supplier also has a PO for the same item in the same month at a lower rate. The exception condition requires two or more different suppliers in the same month. Same-supplier rate variation alone is not flagged — the tool compares across suppliers, not within one supplier.
Two suppliers have identical prices for an item in the same month. Is either flagged?
No. When two rows share the minimum price (a tie), neither is flagged as an exception. Both are treated as Lowest Rate records and Rate Diff and Excess Cost are zero for both.
The same item appears in March and April. Are they compared against each other?
No. Grouping is by Month × Item Code. An item in March is a completely separate group from the same item in April. Cross-month comparisons are not performed.
My file has 50,000 rows. Will the tool handle it?
Yes — the analysis runs entirely in your browser memory. For very large files the analysis may take a few seconds, but there is no hard row limit. The on-screen table previews cap at 500 rows for performance; exports always contain the full dataset.
I applied filters and then clicked Export. Does the export reflect the filtered view?
No. All three export options always export the complete, unfiltered dataset. This is intentional — audit working papers must represent all data, not just a filtered subset.
My header row is not Row 1. How do I handle that?
Change the Header Row number in the configuration sidebar before mapping columns. Rows above the header row are ignored; rows below it are treated as data.
Can I re-run the analysis with different column mappings?
Yes. Change any column dropdown in the sidebar and click Run Analysis again. The results panel will update completely. Click New Analysis to start fresh with a different file.