XeerSoft Cloud ERP · Implementation
Project 01 · Jan – Jun 2023 · Go-Live Jun 2023

Inventory & Procurement
Management

Full P2P implementation on XeerSoft Cloud ERP as sole Implementation Consultant: gathered procurement requirements, configured master data for 180+ materials and 10+ vendors, designed 2-level approval workflow, and applied statistical modelling to solve chronic stockouts at Newton Sixth Form School.

Project SpecP-01
Platform XeerSoft Cloud ERP
Role Implementation Consultant
Duration 6 months
Modules Inventory · Procurement · Workflow
Users 15+ procurement staff
Status LIVE · Jun 2023
86%
▼ reduced
Uniform stockout rate
before22%
after3%
100%
✓ eliminated
Unauthorised POs
before30%
after0%
82%
▼ reduced
Textbook write-off
before฿45K
after฿8K
28%
▲ improved
Vendor on-time delivery
before68%
after87%
Live Production Dashboard
Procurement Project · KPI Improvement Visualisation
Power BI
Power BI dashboard showing procurement KPI improvements

Newton's uniform and textbook procurement ran on intuition — 22% of intake seasons hit XS/XXL stockouts. I rebuilt it as a statistically-planned, approval-controlled procure-to-pay system on XeerSoft Cloud ERP.

Business Context & Problem

Newton Sixth Form managed procurement for school uniforms (~180 SKUs) and textbooks (~40 titles) without a structured system: purchase requests were uncontrolled, approval was informal, and uniform stockouts occurred every intake season due to intuition-based ordering.

Three core issues identified

· Chronic XS/XXL stockout rate at 22% of intake seasons, root cause: planning parameters set by intuition, not statistical models

· Textbook over-ordering at 8–12% buffer above enrolment → ฿28–45K annual write-off from obsolete editions

· No approval threshold: any staff could raise unlimited purchase requests

My Role & Accountability

I joined as sole Implementation Consultant. The challenge wasn't simply to configure an ERP module: it was to diagnose why the existing process was failing, design a system that solved root causes, and ensure adoption across 15+ procurement staff.

I split the work into three streams running in parallel: (1) Master Data Configuration for 180+ materials and 10+ vendors on XeerSoft, (2) Statistical Modelling to calculate scientifically-grounded reorder parameters, and (3) Workflow Design for 2-level purchase approval authorization.

Consulting Approach

Before configuring a single screen I fixed the consulting spine of the build: the method that decides the numbers, the tools that hold them, and the logic the developers implement. Every interactive exhibit further down is an artifact of one of these three.

Methodology

Plan by statistics, not intuition

The root cause was intuition-based ordering. I matched a demand model to how each SKU actually behaves, then sized and timed every order from it.

  • Poisson for low-volume, lumpy demand — XS/XXL sizes, minority subjects, devices
  • Normal-Z service level for steady, high-volume consumables
  • EOQ for order size; reorder point = lead-time demand + safety stock
  • MRP explosion + cumulative lead-time offset for the term plan
Tools

One configured system, one source of truth

The numbers live in the XeerSoft master data I configured and are read back for decisions — no parallel spreadsheets drifting out of sync.

  • XeerSoft — Item/Vendor Master, Purchase Requisition, Workflow Authorization, Goods Receipt
  • Item master structured category → class → size/subject, each with its planning class + ROP
  • Power BI for KPI read-back; a Poisson/EOQ workbook to set parameters
Logic

Rules a developer can build to

I wrote the system's behaviour as decision rules in the FSD — not prose — so the build is traceable and testable line by line.

  • Approval: ≤฿50K → Dept Head, >฿50K → Director (FSD-P1-01)
  • Traceability: 9-char serial + Learn Balance Code per unit, set at issue
  • Control: reorder fires when on-hand < ROP; 3-way match on receipt

Read the rest of this page as proof of the spine above: the Procurement Simulation runs the methodology live, the Order Entry catalog is the configured tooling, and the FSD logic is what the developers received.

Solution Design · Demand Model Selection

Every stock item asks the same question: how much safety stock guards against a stockout at a 97% service level? The honest answer depends on how much the item actually sells — so I chose the demand model by volume, not by product type. The three panels show why.

Poisson PMF 97% reorder point Normal approximation impossible (demand < 0)

The model is chosen by demand volume, not by product. At very low volume a Normal curve even predicts impossible negative demand (the red 2.3% at λ=4), so low-volume SKUs use Poisson — safety stock from the mean alone, which is robust when there's too little sales history to estimate σ reliably. As volume rises the two converge (λ=19.5 → reorder 28 vs 27.8; λ=63 → 78 vs 77.9), so high-volume sizes use the simpler Normal-Z.

Planning Rules · Model-Selection Logic

Three planning rules, each matched to how its items behave. The Purchase Requisition catalog below tags every line with the rule that governs it.

Planning modelApplied toWhy this model
PoissonLow-volume SKUs — XS/XXL sizes, minority subjects, subject-kit specialtySafety stock from the mean alone; robust when sales history is too thin to estimate σ
Normal-ZMid / high-volume sizes & steady consumablesEnough history to estimate σ; a service-level Z gives a tighter reorder point
Modified EOQTextbooks (~40 titles)Order size balances holding vs ordering cost, with an edition-risk penalty to curb obsolete-edition write-off

Capital equipment (laptops, tablets, scanners) is deliberately not demand-planned — it's irregular and high-value, so it's controlled by the value-based approval routing instead. Alongside this: a 2-level approval workflow (≤ ฿50K → Dept Head, >฿50K → Director), ABC stock flagging, ~180 uniform SKUs and ~40 textbook titles configured, a vendor master for 10+ suppliers, and the full P2P cycle (Purchase Requisition → Purchase Order → Goods Receipt → Invoice, 3-way match).

How I'd defend this in interview

"We only run statistical planning on recurring stock items, and we match the distribution to each SKU's demand volume — Poisson where data is too sparse to estimate σ, Normal-Z where it isn't. Capital equipment isn't forecast at all; it's irregular and high-value, so it's controlled by value-based approval routing."

P2P Process Flow · Designed for XeerSoft
START 1. Create Purchase Requisition Requester · PR Form Amount ≤ ฿50,000 ? YES NO 2a. D1 Approve Department Head 2b. D2 Approve Director 3. Create Purchase Order Vendor + Price List 4. Goods Receipt 3-Way Match · Invoice END

XeerSoft Module Flow

The full P2P process as configured in XeerSoft, driven by module screens and menu navigation (no transaction codes). Each step maps to a module → function path in the live system.

#Process StepXeerSoft Module → Function
1Create Purchase RequisitionProcurement › Purchase Requisition › Create
2PR Approval · 2-levelWorkflow Authorization › Approval Rule
3Create Purchase OrderProcurement › Purchase Order › Create
4Goods ReceiptInventory › Goods Receipt
5Invoice Matching · 3-way matchProcurement › Invoice Matching
6Stock MonitoringInventory › Stock Balance / Reorder Report
7Vendor EvaluationProcurement › Vendor Scorecard
8Master DataInventory › Item & Vendor Master

Purchase Requisition · Order Entry

Build a requisition from the configured catalog and watch the planning class and approval routing respond — the specified behaviour I designed, not the proprietary XeerSoft UI. The catalog is the item master I set up across six classes (Uniforms, PE Kit, Subject Kit, Stationery, Textbooks, Equipment). Each stocked line is tagged by its planning model (Poisson for low-volume sizes & minority specialty; Normal-Z for steady consumables; Modified EOQ for textbooks) with a live stock signal against its reorder point; capital equipment is value-routed, not demand-planned. Every unit carries a 9-character serial and a Learn Balance Code (LB######) engraved to the owning student at issue. Submitting applies the 2-level approval rule (FSD-P1-01: ≤ ฿50,000 → Dept Head; > ฿50,000 → Director) — add an Equipment line and watch routing escalate to Director.

🔒 Illustrative reconstruction · order-entry UI rebuilt to match the configured master data · original XeerSoft screens under NDA · serial / Learn-Balance codes and stock levels illustrative; prices and structure per author.
XeerSoft Cloud ERP · Procurement › Purchase Requisition › Create RECREATION
Interactive reconstruction of the configured catalog and approval routing · not the proprietary XeerSoft interface.

Functional Spec & Build Evidence

The business logic I authored in the Functional Specification Document (FSD) and handed to the XeerSoft development team to implement.

FSD-P1 · approval & posting rulesspec · pseudocode
// FSD-P1-01 · Workflow Authorization · 2-level PR approval ON purchase_requisition.submit: total = SUM(pr.line_items.amount) IF total ≤ 50,000 → approver ∈ { Dept Head, Director } ELSE → approver = Director only // block Dept-Head-only approval // FSD-P1-02 · Goods-Receipt GL mapping fix (IT-asset category) ON goods_receipt.post: gl = lookup(GL_determination, item.category) IF gl is empty → block posting; "account determination missing" // resolution (config): map category 'IT Asset' → GL 160000 // FSD-P1-03 · Report · Size-Mix vs statistical target FOR EACH sku: IF on_hand < safety_stock → STOCKOUT ELSE IF on_hand > target × 1.2 → OVERSTOCK ELSE → OK

Live Spec Simulation

An interactive simulation that runs the FSD logic above directly in your browser: it reproduces the specified behaviour I designed, not the proprietary XeerSoft UI.

XeerSoft Cloud ERP · Procurement › Spec Simulation SIMULATION

Purchase Requisition

Routing Decision · FSD-P1-01

Requester Dept Head
≤ ฿50K
Director
> ฿50K
PO
Required approver
Threshold rule฿50,000
Result
Interactive simulation of the specified logic · not the proprietary XeerSoft interface.
Delivery model · role boundary

On XeerSoft Cloud ERP I worked as Functional Consultant / Business Analyst, owning requirements, configuration, FSD authoring, UAT and defect management. The custom logic below was implemented by XeerSoft’s in-house development team against my specifications.

The pseudocode shown is the specified expected behaviour (my FSD deliverable), not vendor source code, and deliberately platform-neutral so it reads the same to a XeerSoft or generic ERP reviewer.

Validation, UAT & Defect Control

I did not sign off the build as one pass/fail. I decomposed the P2P scope into 10 sub-unit tests, each run as a manual test case of ~10 ordered steps validated against 5 complex conditions, with one written specific assurance per sub-unit (the exact thing the test guarantees). This is the breakdown behind the UAT & defect-fix window in the delivery timeline below — the part that is easy to claim and hard to show.

📋 Manual test criteria · how every sub-unit was validated

Each sub-unit test is a manual procedure: log in under the correct role, drive the transaction step by step, and confirm the posting, workflow and data outcome at each gate. Every test carries 5 complex conditions — partial / over-tolerance / variance / missing-config / period-control paths — not just the happy path. A sub-unit only closes when its specific assurance holds under all five and a regression retest is clean.

Flagship worked test case · full manual procedure 10 steps · 5 conditions
UT-P1-04 Goods Receipt posting & GL account determination PASS · cycle 2 (after fix)

Role: Warehouse / Receiving · tied to the live UAT blocker in the delivery timeline below — a Goods Receipt that silently failed to post for a non-stock item category. This is the procedure that surfaced it.

Manual procedure · 10 steps

  1. Log in as Warehouse role; open the XeerSoft Goods Receipt screen against open PO #PO-2024-0117 Receipt screen.
  2. Confirm PO line items, ordered qty (120 units) and the default storage location.
  3. Enter received qty = 100 (partial delivery); set the standard goods-receipt posting type Std receipt.
  4. Attach delivery-note reference; set posting date to the current open period.
  5. Set stock type unrestricted; verify batch / serial not required for this item.
  6. Post the receipt; capture the goods-receipt document number.
  7. Verify the inventory GL (debit) and receipt/invoice clearing (credit) postings were generated.
  8. Open the XeerSoft Invoice Matching screen Invoice review; enter the vendor invoice for 100 units.
  9. Run the 3-way match (PO price × receipt qty × invoice qty/price); confirm within tolerance.
  10. Post the invoice; confirm receipt/invoice clearing nets to zero and AP liability is raised.

Complex conditions · 5 paths

  • C1Split delivery — second receipt for the remaining 20 units; the running receipt/invoice clearing balance must reconcile across both receipts.
  • C2Over-delivery beyond tolerance (125 of 120) must be blocked or warned per the tolerance key, never posted silently.
  • C3Price variance > 5% on the invoice vs PO must raise a price-variance block and route to the buyer.
  • C4Non-stock / IT-asset category with no account determination — the silent stopper this test was built to catch.
  • C5Closed-period posting — a back-dated receipt into a closed period must be rejected and forced to the current period.
◆ Specific assurance

Guarantees that no goods movement posts without a valid inventory + receipt/invoice clearing account pair, that the 3-way match holds quantity and price within the configured tolerance key, and that receipt/invoice clearing nets to zero after invoice posting. A receipt that cannot derive a GL account is hard-stopped with an error, not silently skipped — the exact failure mode caught in UAT cycle 1 and closed as DEF-P1-01.

Sub-unit test register · the full decomposition 10 components
UT-P1-01Purchase Requisition · create & field validation9 steps
  • Mandatory fields (cost centre, account assignment) enforced on save
  • Multi-line PR with mixed material + free-text items
  • Zero / negative quantity rejected; UoM mismatch caught
  • Duplicate PR for same item within 24h flagged
  • Account-assignment category drives the right field set
Assurance: a PR cannot be saved without a complete, valid account assignment, and no quantity/UoM combination can pass that the downstream PO would reject. PASS
UT-P1-02PR approval workflow · ฿50K multi-level release10 steps
  • < ฿50K — single-level (dept head) release only
  • ≥ ฿50K — second-level (director) release required
  • Amount edited above threshold after submit must re-trigger release
  • Approver-on-leave delegate path routes correctly
  • Reject → rework → resubmit re-enters at level 1
Assurance: no PO can be approved above ฿50K without a recorded director approval, and any value change re-evaluates the approval route from scratch. PASS · after DEF-P1-02
UT-P1-03Purchase Order · create & approval route9 steps
  • PR → PO conversion carries account assignment intact
  • PO price from contract / info record vs manual override
  • Approval blocked until route is fully approved
  • Partial PR-to-PO (split across vendors)
  • Changing an approved PO re-opens the approval route
Assurance: a PO cannot be sent to a vendor until its approval route is complete, and edits to an approved PO revoke that approval rather than silently shipping. PASS
UT-P1-04Goods Receipt · posting & GL determination10 stepsflagship
  • Partial / split receipt reconciles the running receipt/invoice clearing balance
  • Over-delivery beyond tolerance blocked, not posted
  • Posting type drives correct stock treatment
  • Missing account determination hard-stops (no silent skip)
  • Closed-period receipt rejected and re-dated
Assurance: detailed above — no movement posts without a valid inventory + receipt/invoice clearing account pair. PASS · after DEF-P1-01
UT-P1-05Invoice Matching · 3-way match10 steps
  • Qty + price both within tolerance → auto-post
  • Price variance > 5% → block + route to buyer
  • Qty variance → match to received, not ordered
  • Invoice before receipt → parked, not posted
  • Duplicate invoice number on same vendor blocked
Assurance: nothing pays out unless PO, receipt and invoice agree on both quantity and price within tolerance; everything outside tolerance lands on a human worklist. PASS · after DEF-P1-03
UT-P1-06Reorder point · Poisson (low-volume SKU)8 steps
  • λ < 25 SKUs (XS, XXL) use Poisson, not Normal
  • 97% service level → SS = ⌈Z·√λ⌉
  • No negative / fractional reorder point produced
  • Thin sales history (single season) still yields a point
  • Lead-time change re-derives the reorder point
Assurance: low-volume sizes get a defensible reorder point from the mean alone, and the model never proposes an impossible (negative) stock target. PASS
UT-P1-07Reorder point · Normal-Z (mid-volume)8 steps
  • Stable S–L sizes use Normal-Z at 97%
  • SS = Z·σ·√LT computed on field values
  • Convergence with Poisson checked at λ ≈ 21
  • Demand spike trims to a sane safety cap
  • Rounding to whole units, never below safety
Assurance: the high-volume sizes hold a 97% service level with the simpler model, and the Poisson/Normal handoff is verified at the volume where they meet. PASS
UT-P1-08Reorder point · EOQ + edition-risk penalty9 steps
  • Textbooks use modified EOQ, not plain reorder
  • Edition-obsolescence penalty shrinks the order
  • Soon-to-be-obsolete edition flagged → reduced qty
  • New-edition cutover does not double-order
  • Write-off risk reflected in the order quantity
Assurance: textbook orders are penalised for edition risk so the system does not over-buy stock that is about to be written off. PASS · after DEF-P1-04
UT-P1-09Vendor master & delivery scorecard8 steps
  • Lead-time / on-time fields drive the scorecard
  • Partial GRs of one PO line count as one late event
  • Blocked vendor cannot be selected on a new PO
  • Duplicate vendor record detection
  • Scorecard recomputes on each closed receipt
Assurance: vendor performance reflects reality — one late line is one late event, not several — so scorecards are trustworthy for sourcing. PASS · after DEF-P1-05
UT-P1-10PR-approval custom report (RICEFW)7 steps
  • Approval status, approver, timestamp all captured
  • Filter by amount band / status / date range
  • Pending-too-long items surfaced (ageing)
  • Export totals reconcile to the PR list
  • Authorisation: buyers see only their scope
Assurance: the custom report is an audit trail — every approval is attributable and the figures reconcile back to source PRs. PASS
Test execution timeline · UAT cycle by working day
Day 1Day 10Day 20
PR create & validation
2d
UT-01
PR approval workflow
3d
UT-02
PO & approval route
2d
UT-03
Goods Receipt + GL (defect)
3d
UT-04
Invoice 3-way match
3d
UT-05
Reorder models ×3
4d
UT-06–08
Vendor master & scorecard
2d
UT-09
PR-approval report (RICEFW)
3d
UT-10
Regression · all 5 fixes
3d
retest
Sign-off & Go-Live readiness
2d
gate
Sub-unit testDefect foundRegression retestSign-off gate
Defect log · raised to dev → fixed → retested
IDSub-unitWhat broke (symptom)SevRoot causeFix I specified to devDaysRetest
DEF-P1-01 UT-04 receipt posting Goods receipt for the IT-asset item category silently failed to post — no error, no receipt document. HIGH No GL account determination for that item accounting category — posting had no inventory / offset account. Mapped the asset category → inventory GL 160000 + receipt/invoice clearing, and added a hard-stop error when determination is missing. 2 ✓ PASS
DEF-P1-02 UT-02 PR approval Editing a PR amount above ฿50K after first submit did not re-trigger director approval. HIGH Approval route was evaluated only on create, not on value change. Re-evaluate the approval route on any value edit and reset prior approvals before re-routing. 3 ✓ PASS
DEF-P1-03 UT-05 3-way match An invoice with 7% unit-price variance auto-posted instead of blocking. MED Tolerance key upper limit was set too wide (10%). Tightened the price tolerance to 5% and routed over-tolerance invoices to the buyer worklist. 2 ✓ PASS
DEF-P1-04 UT-08 EOQ reorder Textbook reorder point ignored edition risk and over-ordered obsolete editions. MED Safety-stock formula used plain EOQ with no edition-risk penalty term. Added an edition-risk penalty to EOQ so flagged editions order down toward run-out. 4 ✓ PASS
DEF-P1-05 UT-09 vendor scorecard Late-delivery count double-counted across partial GRs of one PO line. LOW Scorecard counted each partial receipt as a separate late event. Dedupe on the PO line; count only the first late event per line. 1 ✓ PASS

5 defects raised to the XeerSoft dev team across the UAT window, ~12 working days of fix-and-retest in total. Two were go-live blockers (silent goods-receipt failure, approval bypass); all five closed with a clean regression retest before the intake-season Go-Live. The discipline is the point: every defect has a named symptom, a root cause, a fix I specified, and a retest result — nothing closed on assertion.

Statistical Modelling

Rather than guess safety stock values, I applied three different statistical models based on SKU demand patterns, and entered the calculated parameters directly into XeerSoft inventory planning fields.

Model selection by SKU type

· Poisson Distribution for low-volume SKUs (λ < 25): XS and XXL uniform sizes at 97% service level

· Normal Z-score for mid-range sizes (S–L) with stable demand patterns

· Modified EOQ with Edition-Risk Penalty for textbooks subject to edition obsolescence

◆ Why Poisson Distribution?

An XS or XXL shirt doesn't sell in a steady stream. It sells as a few separate, countable events over a season: rare, independent arrivals that Poisson is built to describe. The choice between Poisson and the Normal model comes down to one thing, how much the size sells.

  • Countable and low: whole units, never fractional, never negative.
  • Right-skewed at low volume: a symmetric Normal curve misfits the tail and can even imply negative demand.
  • One parameter: mean = variance = λ, so a single number sets the reorder point, SS = ⌈Z·√λ⌉. No long history needed.
Poisson (uses mean only) Normal approximation 97% reorder point
λ = 4 very low volume · illustrative
Normal assigns 2.3% to demand < 0 (impossible)
λ = 21 PE Shirt XS · real SKU
97% reorder: Poisson 30 · Normal 30 (nearly equal)
λ = 78 PE Shirt M · real SKU
97% reorder: Poisson 95 · Normal 95 (identical)
units of demand over the lead time · bars = Poisson, dashed = Normal approximation

The model is chosen by demand volume, not by product. At very low volume the Normal curve even predicts impossible negative demand, so the low-volume tails (XS, XXL) use Poisson: safety stock from the mean alone, robust when there is too little sales history to estimate σ reliably. As volume rises the two converge, so high-volume sizes (S–L) use the simpler Normal-Z. The λ = 21 and λ = 78 panels are the same XS and M SKUs from the worked example below (reorder 30 and 95).

Reorder Point & EOQ · Worked Example

Turning the models into the actual numbers entered into XeerSoft's Reorder-Point Planning fields. The inputs below are reconstructed so they reproduce the safety stock and reorder points behind the 97% service level (the same ROPs the order screen above flags against); the achieved outcomes (stockout 22% → 3%, write-off ฿45K → ฿8K) are the real results.

🔒 Worked example · inputs reconstructed to reproduce the achieved 97% service level and reorder points · original working data not retained (confidential) · figures approx.
SKUModelDemandLead timeλ / σ_LTSafety stockReorder point
PE Shirt · XSlow-volPoisson~3 /wk~7 wkλ = 21930
PE Shirt · MNormal-Z~13 /wk~6 wkσ_LT ≈ 8.81795
PE Shirt · XXLlow-volPoisson~3 /wk~7 wkλ = 21930
// service level 97% → Z = 1.88 (chosen SL for the XS / XXL tails) Poisson (low-volume, λ < 25): SS = ⌈Z·√λ⌉ ROP = λ + SS XS: λ = 21 → SS = ⌈1.88·√21⌉ = 9 → ROP = 30 Normal-Z (stable demand): SS = ⌈Z·σ_LT⌉ σ_LT = σ·√LT ROP = μ_LT + SS M: μ_LT = 78, σ_LT ≈ 8.8 → SS = 17 → ROP = 95 → entered per-SKU into XeerSoft Reorder-Point Planning fields
// Modified EOQ with edition-risk penalty · textbook (AS/A-Level · ฿2,345) D ≈ 120 /yr S ≈ ฿500 /order H = 25% · ฿2,345 ≈ ฿586 /yr EOQ = √(2DS / H) = √(2·120·500 / 586) ≈ 14 copies + edition-risk (obsolescence) → H_eff ≈ ฿879 → EOQ* ≈ 12 copies → smaller, more frequent lots = less stranded stock at edition change → write-off ฿45K → ฿8K

Methodology Simulation · MRP

The reorder-point and EOQ models above plan independent-demand items, whose demand comes from forecasts. But when an item's demand is derived from a parent through a bill of materials, you don't forecast it, you calculate it. That is Material Requirements Planning. Below is a full MRP run worked end-to-end on a 4-item, 3-level BOM, every number traced from the master schedule down to the shop-floor release.

Standard A/B/C/D worked example, used to demonstrate the MRP method itself, not a specific client BOM.

01 · Supply system basis

MRP is a push system: a master schedule pushes calculated requirements down the BOM and out as orders, rather than pulling against live consumption. The split that decides the planning method is the type of demand.

Independent demand
Forecast-driven

Originates outside the system (customers, term intake). Planned with reorder point / EOQ / statistics — the uniform and textbook SKUs above.

Dependent demand
Calculated via BOM

Derived from a parent item's schedule. Never forecast: it is exploded from the parent through the bill of materials. This is the job MRP does.

02 · The MRP overall
Inputs
MPS — A: 100 @W6 · 50 @W8BOM — A = 2B + 1C · B = 1DInventory — on-hand · lead time
EngineMRPexplode · net · lot-size · offset
Outputs
Planned order releasesper item · time-phasedreschedule signals
03 · Basic processing steps
01ExplodeBreak the parent's planned release into component gross requirements via the BOM (×2 B, ×1 C, ×1 D).
02NetSubtract projected on-hand and scheduled receipts to get the net requirement.
03Lot-sizeApply the lot rule. Here lot-for-lot: order exactly the net, no more.
04OffsetShift the order earlier by the item's lead time to get the planned order release.
04 · Exploding & netting

Each parent's planned release becomes the child's gross requirement, then on-hand is netted off:

ComponentSource (parent release)× per parent= Gross reqOn-handNet req
BA: 80 @W5 · 50 @W7×2160 @W5 · 100 @W730130 @W5 · 100 @W7
CA: 80 @W5 · 50 @W7×180 @W5 · 50 @W71070 @W5 · 50 @W7
DB: 130 @W3 · 100 @W5×1130 @W3 · 100 @W50130 @W3 · 100 @W5
05 · Basic MRP record · time-phased
Item ALT 1 wk · on-hand 20 · lot-for-lot · level 0 (MPS / end item)
Week12345678
Gross requirements10050
Scheduled receipts
Projected on-hand2020202020000
Net requirements8050
Planned order receipt8050
Planned order release8050
Item BLT 2 wk · on-hand 30 · lot-for-lot · level 1 (= 2 per A)
Week12345678
Gross requirements160100
Scheduled receipts
Projected on-hand303030300000
Net requirements130100
Planned order receipt130100
Planned order release130100
Item CLT 1 wk · on-hand 10 · lot-for-lot · level 1 (= 1 per A)
Week12345678
Gross requirements8050
Scheduled receipts
Projected on-hand101010100000
Net requirements7050
Planned order receipt7050
Planned order release7050
Item DLT 1 wk · on-hand 0 · lot-for-lot · level 2 (= 1 per B)
Week12345678
Gross requirements130100
Scheduled receipts
Projected on-hand00000000
Net requirements130100
Planned order receipt130100
Planned order release130100
06 · Planned order release · summary
ItemBOM levelPlanned order releases
A0 · end itemW5 → 80 · W7 → 50
B1W3 → 130 · W5 → 100
C1W4 → 70 · W6 → 50
D2W2 → 130 · W4 → 100
07 · BOM tree & lead-time offset
BOM Tree · multi-level dependency, demand explodes downward
A end item · LT 1 ×2 ×1 B LT 2 · OH 30 C LT 1 · OH 10 ×1 D LT 1 · OH 0 release cascade D W2 → B W3 → A W5 → A ready W6
08 · Combined planning calendar

All planned order releases on one timeline. Read the staircase: the deeper the item, the earlier it must start, so the schedule cascades up from D toward the end item A.

ItemW1W2W3W4W5W6W7W8
D130100
B130100
C7050
A8050
Each cell is a planned order release (quantity to start that week). The first batch fires at D W2 and finishes as A at W6; the second batch D W4 → A W8.
▸ Why lead times stack

Every BOM level adds its own lead-time offset, and the offsets compound down the tree. To have A ready in Week 6, the deepest branch has to start far earlier:

release D · W2  →(LT1)  D ready W3  →(LT2)  B ready W5  →(LT1)  A ready W6

That is a 4-week cumulative lead time across three levels for what looks like a 1-week end item. The same compounding is exactly why the independent-demand SKUs above carry a 6–7 week planning lead time: the supplier offset plus every upstream step, stacked. Plan against the cumulative lead time, never the item's own.

Procurement Simulation

The MRP run above is the method in the abstract; this is the same explode → pool → cost → offset logic applied to the institute's real start-of-term procurement. Three headcounts drive the whole plan: change them (or pick a different device model) and the demand, cost and order timeline recompute live.

◇ Parameters · edit to recompute
Math / Science · total 100

Prices are Thai-market reference (2026), starting configurations; adjust per quote. Lead times in weeks. Everything below recomputes from these inputs.

01 · Demand explosion

Each headcount explodes into per-item quantities through its kit:

ItemPer unitHeadcountQuantity
02 · Common-component pooling

Pens, folders and the teacher set are stationery-class items used across kits. Instead of ordering them per-kit, they net into one consolidated stationery PO (the Stationery vendor from the scorecard above): fewer POs, one delivery, volume pricing.

Pooled itemSourceQtyCost
03 · Cost breakdown
ItemQtyUnit ฿Line ฿
Estimated procurement total
฿0
04 · Lead-time offset timeline

Goods-ready is week 0 (term start). Order release = 0 − lead time:

−5−4−3−2−10 · ready
Laptops & tabletsLT5 · release −5
Lenovo · iPad · MacBook
LockersLT4 · release −4
Locker
Cutter & scannerLT3 · release −3
Paper cutter · scanner
Math & science kitLT2 · release −2
Casio · compass · lab coat · goggles
Stationery & consumablesLT1 · release −1
base kit · plan book · answer sheets

The longer the bar, the earlier the order must be placed. The Apple / laptop devices (LT5) start the whole procurement, five weeks before term.

05 · Flow
InputHeadcount
students · teachers · rooms
Map3 Kits
Student · Teacher · Classroom
ComputeExplode + Poolqty · net common
OutputOffset → PO
release −5 … 0 wk
06 · Insight
▸ The bottleneck is the Apple / laptop devices

The LT5 devices (Lenovo laptop, iPad, MacBook) are both the schedule bottleneck — ordered 5 weeks before term, earliest of anything — and the cost centre:

฿542,500 in LT5 devices = 98.6% of the Teacher kit · 83.1% of Teacher + Classroom spend

Everything else can wait until the last 1–2 weeks, but slip the device order and the whole term opening slips. Same compounding lead-time logic as the MRP run above: plan the long-lead, high-value items first — which is why those sit at the 6–7 week end of the planning horizon.

Configuration Parameters

XeerSoft · planning & approval configparameters
// Inventory Planning Parameters (XeerSoft) Planning Type: Reorder Point Planning Lot Sizing: Lot-for-lot Safety Stock: calculated per SKU via Poisson/Normal Reorder Point: trigger for auto-replenishment Service Level: 97% target for XS/XXL // Approval Matrix (Workflow Authorization) Level 1: Dept Head ≤ THB 50,000 Level 2: Director > THB 50,000 Approval: Sequential, L1 approves before L2

Master Data Volume

Configured the full master data foundation for the P2P cycle from scratch on XeerSoft.

~180
Material Records
Uniforms + Textbooks
10+
Vendor Masters
Full price record integration
4 × 6
Uniform Variants
Types × Sizes (XS–XXL)
~40
Textbook Titles
Edition-tracked

Vendor Scorecard

Vendor master records were scored each cycle on delivery, quality, price and lead time, and the underperformers actively managed. Driving them up moved portfolio on-time delivery 68% → 87%.

🔒 Representative recreation · vendor names masked · per-vendor figures illustrative · portfolio on-time 68% → 87% is the real cohort result.
VendorScopeOn-timeQualityLead timeScore
Vendor AUniforms92%98%35 d
4.6
Vendor BCore textbooks88%96%21 d
4.4
Vendor CImported texts81%95%45 d
4.0
Vendor DStationery90%97%14 d
4.5
Vendor ELab consumables84%94%28 d
4.1
Weighted score = on-time 35% · quality 30% · price 20% · lead-time 15%. Cohort on-time delivery improved 68% → 87% after the scorecard rollout (real result); per-vendor values illustrative. Average on-time across the five = 87%.

Measured Results

The measurable outcome was not one isolated KPI; it was a controlled P2P operating model. Uniform stockouts moved from 22% to 3%, unauthorised POs from 30% to 0%, textbook write-off from ฿45K to ฿8K, and vendor on-time delivery from 68% to 87%. Those are the same audited results shown in the executive KPI cards and Power BI exhibit above.

Tools & Deliverables

XeerSoft Inventory Module XeerSoft Procurement Module XeerSoft Workflow Authorization Python (Statistical Modelling) Power BI Jira (Defect Tracking) Excel · SQL draw.io (Process Flow) Word (FSD/BRD)

Delivery Timeline

How the project was actually run end-to-end after the consulting work above: the timeline and where it was at risk, how I specified the build for the developers and verified it, the weekly Agile cadence, and the stakeholder network I coordinated as the single point of accountability.

⏱ Schedule stakes · why the date mattered

Go-Live was gated to the June intake season: uniforms and textbooks had to be on shelf before the Jun–Jul intake. Slipping the date meant another full season at the old 22% stockout rate plus ฿28–45K of textbook write-off. The schedule was not flexible: the intake calendar set a hard, externally-fixed deadline.

Project timeline · month-by-month

Jan
Feb
Mar
Apr
May
Jun
Requirements & As-Is
1 mo
Master data (~180 items)
2 mo
Statistical modelling
2 mo
Config + workflow + FSD
2 mo
UAT & defect fixes
2 mo
Training + Go-Live
LIVE
DeliveredRisk / slippedRecoveredGo-LivePlanned / in progress

Schedule risk & recovery

UAT blocker · Goods receipt could not post

During UAT, goods-receipt posting was blocked for the IT-asset item category because no GL account determination existed (FSD-P1-02), a silent stopper that would have frozen receiving. Resolved → I traced it to a missing mapping, specified the fix to dev (category → GL 160000), retested, and kept Go-Live on the intake date.

Adoption risk · staff trusting the system over intuition

The statistical reorder points were correct, but procurement staff were used to ordering by gut feel: the real risk to the result was non-adoption, not configuration. Resolved → I ran weekly adoption reviews for the first 3 months post Go-Live until system-driven reorder points became the default.

Spec design → developer handoff → build verification

01Requirements & As-IsStakeholder interviews, executive sessions, current-state process mapping.
02To-Be & AcceptanceTarget process design + measurable acceptance criteria agreed up front.
03FSD AuthoringDecision tables, field-level data model, GL/workflow rules, edge cases.
04Dev HandoffSpec walkthrough with the dev team, clarify, agree Definition-of-Done.
05Build VerificationTrace the build back to the FSD: data model, posting, workflow, negatives.
06UAT → Go-Live → HypercareCycle sign-offs, defect burn-down, cutover, post-live support.

How I spec for developers

  • Write every rule as a decision table (input → expected output), not prose.
  • Specify the data model field-by-field: keys, types, validation.
  • Define GL posting and workflow thresholds explicitly, with examples.
  • Enumerate edge & negative cases up front (multi-select, zero, partial, duplicate).
  • Agree a Definition-of-Done before the build starts.

How I verify the build (functional, not source-code review)

  • Functional trace: every FSD rule reproduced in the build.
  • Data model check: fields, keys and validation match the spec.
  • Posting check: correct GL accounts, debit/credit, contra logic.
  • Workflow check: routing & thresholds behave per the matrix.
  • Negative / edge tests before happy-path sign-off (the DEF-001 lesson).
  • Regression after every fix: nothing closes without a retest.

Weekly Agile cadence

MON

Backlog & defect triage by severity

TUE

Spec clarification with dev

WED

Build structure review vs FSD

THU

Test / retest fixed items

FRI

Demo + stakeholder sign-off

2× / wk
Dev structure reviewsconfirm
12 wk
Weekly post-live adoption reviews
0
Unauthorised POs since Go-Live

Stakeholder network & RACI

Chatree · sole consultant single point of accountability across ~15 procurement staff · dept heads + director · 10+ vendors · remote XeerSoft dev team
StakeholderCountTheir partRACI
You · Consultant/BA1Requirements, config, FSD, UAT, trainingA / R
Director & Dept Heads2+Approval workflow authority (฿50K rule)C / A
Procurement staff~15Day-to-day users; trained & on-boardedI / R
Vendors10+Master data, lead-time, scorecardC
XeerSoft dev teamremoteBuilt config logic from my FSDR

I was the only consultant, but not working alone. I was the single node connecting approvers, ~15 users and the vendor dev team, and the only person with end-to-end visibility of requirements, build and adoption.

Consultant Takeaway

The biggest learning was that ERP success is 30% configuration and 70% adoption. The statistical models were rigorous, the workflow was clean, but the real win came from training procurement staff to trust system-driven reorder points instead of intuition. Weekly review sessions for the first 3 months post Go-Live were critical to making the change stick.

← All Projects Back to Portfolio