# Case study: Procurement & Requisition Rebuild

> Taking over an unmaintained requisition system, auditing it against live data, and rebuilding purchase and travel requisitions with clear approvals, budget controls, notifications at every step, live dashboards, and direct ERP posting.

- URL: https://www.happen.software/case-studies/procurement-requisition-rebuild
- Publisher: Happen Software (https://www.happen.software/)

## At a glance

- **Client**: International security manufacturer
- **Category**: Manufacturing · Rescue & rebuild
- **Running**: Since 2024 · 2 years
- **Users**: Requesters, buyers, the travel desk, approvers, and finance
- **Engagement**: Took over and supported from late 2024; rebuilt and live in 2026
- **Status**: Live, with the full history migrated from the old system
- **Integrations**: Microsoft Dynamics Business Central, Active Directory, email and push
- **Visibility**: 13 reports, 3 live dashboards, and 30 notification types
- **Scale**: 188 cost centres and approval chains of up to 10 people

## Outcomes

- **39,000+**: Historical requests migrated with their full approval history
- **4,900+**: Purchase requests and trips a quarter taken over by the rebuild: 3,693 and 1,229 in the old system's last full quarter
- **8 → 1**: Conflicting budget calculations replaced by a single engine behind every screen
- **13**: In-depth reports, from budget versus actual to month end, alongside three live dashboards

## Context

Our client's purchasing and travel requests ran on a system built in-house several years earlier. Its original developer had moved on, it ran on an out-of-support framework, and it had almost no automated tests. In its last full quarter it handled 3,693 purchase requests and 1,229 trips.

We took it over in late 2024, stabilised it, and finished its half-built ERP integration. Rather than keep patching it, we audited it end to end, rebuilt it alongside the old one, and moved the business across with its full history.

## The challenge

- **Budget figures that disagreed**: The old system calculated budgets eight different ways with different answers, so finance had to track budgets in Excel alongside it.
- **Requests in a black box**: Requesters were never told the outcome, and stuck requests showed a greyed-out button with no explanation.
- **Unsupported and fragile**: An out-of-support framework, no automated tests, and nobody left who knew how it all fitted together.

## Before and after

| Area | Legacy system | Rebuild |
|---|---|---|
| Updates | Requesters were never told what happened to their request. | Every stage lands in the in-app inbox, with email and push for the updates each person chooses. |
| Budgets | Eight calculations that disagreed, so budgets were tracked in Excel alongside. | One budget overview, with one calculation behind every screen, report, and dashboard. |
| Spending control | Spending caps switched on and off by hand, with no second approver. | Funds released in stages, each approved by a second person, and cost centres that can be frozen. |
| Stuck requests | A greyed-out approve button and no explanation. | My Work says exactly what's blocking a request and who to chase, and blocked requests raise an alert. |
| Month start | Monthly budgets kept in Excel, outside the system. | Each cost centre's budgets pasted straight in from Excel at the start of the month. |
| Month end | Late signatures could spend next month's budget. | Approvals lock on the last evening; open requests are carried over or cancelled, and a month-end report closes the period. |

## A purchase request, end to end

1. **Request**: A requester, or a buyer on their behalf, captures the lines. Each line shows its price against the item's set rate.
2. **Prepare & approve**: Procurement assigns the cost centre and buyer and reviews anything above a value threshold. Approvers then sign in order within the cost centre's price bands; delegates can sign for them, and nobody can approve their own request.
3. **Funds check**: The final signature checks the budget in the same step, so nothing is approved without the money to pay for it.
4. **Post**: Approved purchases post straight to the ERP's requisition worksheet, and the requester is told.
5. **Stay informed**: Every step notifies the people involved. Approvers get reminders and a weekday 07:00 summary, and a blocked request or failed posting raises an alert.
6. **Close the month**: On the last evening, approvals lock. Open requests are carried over or cancelled, the month-end report closes the period, and next month's budgets are pasted in from Excel.

## What we built

- **Audit before code**: We documented the legacy system against a copy of live data: 164 capabilities rated working, defective, unreachable, or dead, and a recommendation to keep, fix, merge, or retire each one, with the open business questions settled with the client.
- **One workflow for purchases & travel**: Price-banded approvals per cost centre, delegation, and segregation of duties. On shared trips, each cost centre approves its own share.
- **Budget controls**: One calculation replaces eight. Funds are checked at the final signature, every release, transfer, and adjustment needs a second approver, and a cost centre can be frozen so it approves nothing.
- **Month start & month end**: Month-start budgets pasted straight from Excel. At month end, approvals lock on the last evening, open requests are explicitly carried over or cancelled, and a month-end report closes the period.
- **Notifications & alerts**: 30 notification types across inbox, email, and push, with each person choosing how they hear. Approval reminders, a weekday summary, and alerts when a request is blocked or a posting fails.
- **Live dashboards**: Budget Health flags cost centres over budget or nearly spent, the Workflow Monitor shows who is holding things up and how long work has waited, and Supplier Insights tracks spend concentration.
- **In-depth reporting**: 13 Excel reports: outstanding work, approval decisions, exceptions, orders placed, purchase and travel registers, supplier and travel spend, budget versus actual, cost-centre statements, budget changes, approvers, and month end.
- **Posted straight to the ERP**: Suppliers and items come from Business Central, currencies are checked against it, and approved purchases post to its requisition worksheet line by line; if a response is lost, it's reconciled before anything is sent again.

## What each team gets

### Requesters

- A short form limited to their own cost centres
- Copy a previous request instead of starting again
- The outcome of every step, as it happens

### Buyers & travel desk

- Requests raised on someone's behalf, properly recorded
- A list of overdue approvers to chase
- Several approved trips posted at once

### Approvers

- One work queue with a quick Decide button
- Reminders and a weekday summary of what's waiting
- Signatures that survive minor edits

### Finance

- Month-start budgets pasted straight from Excel
- Budget Health and budget-versus-actual, live
- A month-end lock, carry-over, and month-end report

## How it was delivered

- **Late 2024, Take over**: Took over the code from its original developer, stabilised it, and finished and shipped its Business Central integration.
- **2026, Audit**: Specified the whole system from its code and live data, settled the open questions with the client, and decided what to keep, fix, merge, or retire.
- **2026, Rebuild**: Rebuilt on a modern stack with an in-app user manual, in parallel with the old system.
- **2026, Live**: The full history migrated after rehearsed imports, then the business cut over from the old system.

## Engineering

- A specification-first rebuild, grounded in live data and the client's answers to the open business questions.
- Funds checked in the same transaction as the final approval, so two approvals can't overspend a budget at once.
- Explicit handling when approvers change while requests are in flight.
- An append-only workflow history recording who acted, and on whose behalf.
- Security tightened throughout: shared credentials retired, sign-in moved to Active Directory, and permissions enforced on the server, not just hidden in the UI.
- About 300 automated unit, UI, and browser tests, and an in-app user manual with screenshots captured from the real app.

Stack: .NET, Angular, PostgreSQL, Microsoft Dynamics Business Central, Active Directory, Firebase, Docker, GitHub Actions

## Get in touch

Stuck with a system your team works around? We'll audit what you have, tell you honestly whether to fix or rebuild, and plan a migration that doesn't stop the business. Book a free 30-minute call with one of our engineers.

Contact: https://www.happen.software/contact or sales@happen.software
