Industry-standard Purchase Order amendment workflow with type classification, threshold-based approval matrix, vendor consent handling, partial receipt rules, impact assessment, before/after comparison, lock periods, and complete audit trail.
PO amendments modify released Purchase Orders. Each amendment type has specific approval and vendor consent requirements. The system tracks cumulative changes and enforces lock conditions.
Each amendment is classified by type to determine approval routing, vendor consent requirements, and auto-approval thresholds.
| Type Code | Description | Vendor Consent | Auto-Approve Threshold |
|---|---|---|---|
QTY_INCREASE |
Increase ordered quantity | Required | ≤10% of original qty |
QTY_DECREASE |
Decrease ordered quantity | Notify Only | ≤20% of original qty |
PRICE_INCREASE |
Unit price increase | Required | ≤5% of line value |
PRICE_DECREASE |
Unit price decrease | Notify Only | Unlimited |
DATE_EXTENSION |
Extend delivery date | Required | ≤30 days |
DATE_ADVANCE |
Earlier delivery requested | Required | Any |
SCOPE_ADD |
Add new line items | Required | N/A |
SCOPE_REMOVE |
Remove/cancel line items | Notify Only | ≤20% of PO value |
TERMS_CHANGE |
Payment/freight/warranty changes | Required | N/A |
SPEC_CHANGE |
Technical specification changes | Required | N/A (Eng. approval) |
SHIP_TO_CHANGE |
Change delivery location | Required | N/A |
CANCELLATION |
Full PO cancellation | Notify Only | N/A |
Approval routing is determined by the percentage value change. Cumulative amendments are factored into threshold calculation.
| Value Change % | Approver Level | SLA (Hours) | Escalation To |
|---|---|---|---|
| ≤5% | Procurement Officer (PO Creator) | 4 | Department Head |
| 5.01% - 10% | Department Head | 8 | Procurement Manager |
| 10.01% - 15% | Procurement Manager | 16 | Director |
| 15.01% - 25% | Director | 24 | CFO |
| >25% | CFO | 48 | CEO |
Price Increases: Require one additional approval level beyond quantity rules.
Specification Changes: Require Engineering Lead sign-off regardless of value impact.
-- Approval Matrix Calculation SELECT amendment_id, value_change_percent, CASE WHEN value_change_percent <= 5 THEN 'PROCUREMENT_OFFICER' WHEN value_change_percent <= 10 THEN 'DEPARTMENT_HEAD' WHEN value_change_percent <= 15 THEN 'PROCUREMENT_MANAGER' WHEN value_change_percent <= 25 THEN 'DIRECTOR' ELSE 'CFO' END AS required_approver, -- Add one level for price increases CASE WHEN amendment_type = 'PRICE_INCREASE' THEN TRUE ELSE FALSE END AS escalate_one_level FROM po.po_amendments;
Vendors can accept, reject, or counter-propose amendments that require their consent. Response deadline is 72 hours with auto-reminders.
Vendor agrees to amendment. System executes changes and updates PO.
Conditional acceptance. Routes to buyer for review of conditions.
Vendor submits alternative proposal. Creates negotiation round.
Vendor declines amendment. Buyer notified with rejection reason.
Timeout after 72 hours. Auto-escalated to buyer for action.
amendment_id — FK to po_amendmentsvendor_id — FK to vendorsresponse_type — ACCEPT, ACCEPT_WITH_CONDITIONS, COUNTER_PROPOSE, REJECT, NO_RESPONSEcounter_quantity, counter_unit_price, counter_delivery_date — Counter-proposal valuescounter_valid_until — Expiry of counter-proposalreminder_sent_24h, reminder_sent_48h — Reminder trackingauto_escalated — TRUE if timeout escalation occurredSpecial restrictions apply when goods have been partially received (GRN exists). Amendments are limited to unreceived quantities only.
| Amendment Type | Allowed After Partial GRN? | Conditions |
|---|---|---|
QTY_INCREASE |
Yes | For unreceived quantity only |
QTY_DECREASE |
Yes | Cannot reduce below received qty |
PRICE_INCREASE |
Restricted | Only for unreceived items |
PRICE_DECREASE |
Yes | Applies to future invoices only |
SCOPE_ADD |
Yes | New line items only |
SCOPE_REMOVE |
Restricted | Only unreceived lines |
CANCELLATION |
Restricted | Only unreceived portion |
-- Partial Receipt Validation CREATE FUNCTION validate_partial_receipt_amendment( p_amendment_id UUID, p_po_item_id UUID, p_new_quantity DECIMAL ) RETURNS BOOLEAN AS $$ DECLARE v_received_qty DECIMAL; v_invoiced_amount DECIMAL; BEGIN -- Get received and invoiced amounts SELECT COALESCE(SUM(gi.accepted_qty), 0), COALESCE(SUM(ii.line_total), 0) INTO v_received_qty, v_invoiced_amount FROM po.po_items pi LEFT JOIN logistics.grn_items gi ON gi.po_item_id = pi.id LEFT JOIN logistics.invoice_items ii ON ii.po_item_id = pi.id WHERE pi.id = p_po_item_id; -- Validate: new quantity >= received quantity IF p_new_quantity < v_received_qty THEN RAISE EXCEPTION 'Cannot reduce quantity below received: %', v_received_qty; END IF; RETURN TRUE; END; $$ LANGUAGE plpgsql;
System auto-calculates and displays the impact of proposed amendments before approval routing.
⚠️ Budget Exceeded: Amendment exceeds available project budget
⚠️ Critical Path Impact: Delivery change affects project milestones
⚠️ Amendment Limit: Approaching maximum amendment count (3)
⚠️ Audit Flag: Cumulative amendments exceed 25% of original value
Side-by-side version comparison for amendment review and approval decision-making.
POs are locked for amendments after certain conditions are met. Lock can be overridden with elevated approval.
| Lock Condition | Lock Type | Override Allowed? | Override Authority |
|---|---|---|---|
| PO Closed | Full Lock | No | - |
| PO Cancelled | Full Lock | No | - |
| Full GRN Received | Full Lock | Credit Notes Only | - |
| Full Invoice Paid | Full Lock | Credit Notes Only | - |
| Days Since PO Release > 365 | Soft Lock | Yes | Director |
| Amendment Count ≥ 3 | Soft Lock | Yes | CFO |
| Cumulative Change > 50% | Soft Lock | Yes | CEO |
1. User attempts amendment on locked PO
2. System displays lock reason
3. User requests override with justification
4. Override routed to designated authority
5. If approved, one-time amendment window opens (24 hours)
id — Primary key (UUID)po_id — FK to purchase_ordersamendment_number — Sequential per PO (1, 2, 3...)amendment_type — Type classification enumstatus — DRAFT, PENDING_APPROVAL, APPROVED, AWAITING_VENDOR, EXECUTED, REJECTED, CANCELLEDoriginal_po_value, proposed_po_value — Before/after amountsvalue_change_amount, value_change_percent — Calculated impactrequires_vendor_consent — Boolean based on typevendor_consent_status — PENDING, ACCEPTED, REJECTED, COUNTER_PROPOSEDcumulative_amendment_count, cumulative_value_change_percent — Running totalsimpact_assessment — JSONB with cost/schedule/budget impactamendment_id — FK to po_amendmentspo_item_id — FK to po_items (NULL for new items)change_type — QUANTITY, PRICE, DELIVERY_DATE, SPECIFICATION, ADD_NEW, REMOVEis_new_item, is_removed — Scope change flagsoriginal_quantity, proposed_quantity — Quantity changereceived_quantity, amendable_quantity — Partial receipt trackingoriginal_unit_price, proposed_unit_price — Price changeoriginal_specifications, proposed_specifications — JSONB for spec changesamendment_id — FK to po_amendmentsapproval_level — 1, 2, 3... based on matrixapproval_type — PROCUREMENT, ENGINEERING, FINANCEapprover_id — FK to usersdelegated_from — Original approver if delegatedstatus — PENDING, APPROVED, REJECTED, ESCALATEDsla_due_date — Calculated from approval matrixis_escalated, escalation_reason — SLA breach trackingamendment_id — FK to po_amendmentsevent_type — CREATED, SUBMITTED, APPROVED, REJECTED, VENDOR_NOTIFIED, VENDOR_RESPONDED, EXECUTED, CANCELLEDactor_id — FK to usersactor_type — USER, SYSTEM, VENDORbefore_state, after_state — JSONB snapshotsip_address, user_agent — Security tracking| Rule ID | Description |
|---|---|
BR-PKR-015 | Amendment types classified by impact: QTY, PRICE, DATE, SCOPE, TERMS, SPEC |
BR-PKR-016 | Approval matrix based on percentage value change with cumulative tracking |
BR-PKR-017 | Vendor consent required for increases; decreases are notify-only |
BR-PKR-018 | Vendor response deadline: 72 hours with auto-reminders at 24h, 48h |
BR-PKR-019 | Counter-proposals create new negotiation round |
BR-PKR-020 | Partial GRN amendments restricted to unreceived quantity only |
BR-PKR-021 | Amendment cannot reduce quantity below GRN'd quantity |
BR-PKR-022 | Amendment cannot reduce value below invoiced amount |
BR-PKR-023 | Impact assessment mandatory before approval routing |
BR-PKR-024 | Before/After comparison view required for all approvals |
BR-PKR-025 | PO locked after: full GRN + payment, 365 days, 3 amendments, or 50% cumulative change |
BR-PKR-026 | Lock override requires one level higher authority approval |
BR-PKR-027 | Complete audit trail with before/after snapshots mandatory |
BR-PKR-028 | Price increase amendments require one additional approval level |
BR-PKR-029 | Specification changes require Engineering Lead approval |
BR-PKR-030 | Amendment notifications sent to: Vendor, Project Manager, Finance |