The accrual nobody can explain. Listed, explained, fixed with a yes.
The Aged GRNI Investigation Agent is an AI agent for Dynamics 365 Finance & Supply Chain Management that explains the old goods-received-not-invoiced balance instead of leaving it to a spreadsheet at close. It lists the uninvoiced receipts by age and value, works out why each one is stuck, a duplicate receipt, a normal partial delivery, a vendor that has not invoiced, shows the evidence behind that reading, proposes the fix, and cancels a duplicate receipt only after a person approves it, then reads the result back. It runs on test data in a demonstration environment today. With the PO Receipt Chase Agent it covers both ends of procure-to-pay: receipts that were never posted, and receipts that were posted and never invoiced.
Aged GRNI, classified
Illustration · test data| Reason | Lines | Oldest, days |
|---|---|---|
| Duplicate receipt | 3 | 74 |
| Partial delivery | 9 | 41 |
| Vendor not invoiced | 12 | 63 |
Proposed fix
Duplicate receipt on one delivery note · the second receipt shown in full · cancel
Waiting for your yes before anything posts.
The accrual everyone explains by hand
Goods arrive, the receipt is posted, and the vendor invoice never matches. The line sits in goods received not invoiced, GRNI, as an accrued liability. That is correct accounting. It is also a balance that ages, and every month-end someone has to say, line by line, why it is still there.
The reasons differ, and the fix differs with them. A duplicate receipt should be cancelled. A partial delivery is normal and should be left alone. A vendor that has not invoiced needs a nudge, and sometimes the invoice is sitting unmatched for a reason nobody has looked at. Telling those apart means opening the order, the receipts, the invoices and the vendor record for each line, which is why the controller's GRNI review is the slowest hour of close.
Dynamics 365 holds every fact needed to explain each line. It does not do the explaining.
Two receipts posted for one delivery. The invoice matched one; the other will never be invoiced. Safe to cancel, once someone is sure.
The vendor shipped half and will ship the rest. The receipt is right, the invoice is coming. Nothing to fix, only to recognise.
Goods received, no invoice for sixty days. The accrual is real and the vendor needs chasing, which is a different job from the first two.
How it works, in four steps
The agent reads Dynamics 365 live, through Microsoft's own surface, under the roles it is given. People talk to it in plain language: “Show me GRNI older than sixty days.”
- 01
List
It pulls the uninvoiced receipts and groups them by age band and value, so the largest and oldest exposure is at the top rather than wherever the report sorted it.
- 02
Explain
For each line it reads the order, the receipts against it, any invoice in the queue and the vendor record, and classifies why the line is stuck: duplicate receipt, partial delivery, vendor not yet invoiced.
- 03
Show
It shows the evidence behind the classification, the two receipts with the same delivery note, the open remainder on the line, the days since receipt with no invoice, so the person can disagree.
- 04
Fix
It proposes the fix. For a duplicate it shows the exact receipt it will cancel and waits for a yes; only then does it cancel it in Dynamics 365 and read the result back. For the other two it drafts the next step for a person to take.
Nothing posts, cancels or reverses without a named person’s yes. The output is a GRNI list where every line has a reason, an owner and a next step, which is what the auditor wanted to see in the first place.
Two ends of procure-to-pay, one approval model
Goods arrived but nobody posted the receipt: the invoice cannot match and payment slips. Goods posted but never invoiced: the accrual sits and ages. The PO Receipt Chase Agent works the first; this agent works the second. Both read Dynamics 365 live, both show the exact record before anything changes, both wait for a yes, both read back.
Where it stands today, exactly
A status against everything we show.
List aged GRNI by age and value, classify each line with evidence
WorkingRuns today on test data in a demonstration environment.
Propose and, after approval, cancel a duplicate receipt and read it back
WorkingSame environment, same demonstration.
Teams approval card and a SharePoint evidence library for each line
DesignedDesigned on Microsoft-documented capabilities; not built yet.
Vendor follow-up drafts for the silent-vendor lines
Built to orderEngineering we do on your environment; no packaged app for it.
What it will not do
An agent that can cancel a receipt is judged on what it refuses.
| It will not | Because |
|---|---|
| Cancel anything unapproved | The receipt it proposes to cancel is shown in full and cancelled only on an explicit yes from a person. |
| Touch a partial delivery | A receipt that is simply waiting for the rest of the shipment is classified as normal and left alone. |
| Post or match the invoice | Invoice matching stays with accounts payable and the workflow already in Dynamics 365. |
| Write to a closed period | It works in open periods only; a line in a closed period is reported, not changed. |
| Act outside its role | It runs under a security role you assign. Microsoft’s MCP server adds no privileges to it. |
| Guess | When the evidence does not settle the reason, it says so and hands the line to a person with what it found. |
The same approval boundary runs through everything we build on Dynamics 365. It is argued in full on the agentic ERP hub and sits beside Microsoft’s own agents in the Dynamics 365 agent catalog.
Aged GRNI and the agent, answered plainly
- What is aged GRNI in Dynamics 365?
- Goods received not invoiced is the accrued liability created when a product receipt is posted before the vendor invoice is matched. Aged GRNI is the part of that balance that has sat beyond a normal invoicing cycle, typically thirty or sixty days. In Dynamics 365 Finance & Supply Chain Management it is reviewed line by line at close, because each line has a different reason for being there.
- Why do GRNI lines get stuck?
- Three reasons cover most of them: a duplicate product receipt was posted for one delivery, so one receipt will never be invoiced; the delivery was partial and the rest is still to come; or the vendor has not sent the invoice, or sent it and it is sitting unmatched. The agent classifies each line into one of those and shows the evidence, so the fix can be the right one.
- Does the agent cancel receipts on its own?
- No. It proposes the cancellation of a duplicate receipt, shows exactly which receipt and why, and cancels it only after a named person confirms. It then reads the result back from Dynamics 365. Partial deliveries are never touched, and nothing in a closed period is changed.
- How is this different from the PO Receipt Chase Agent?
- They work opposite ends of the same gap. The PO Receipt Chase Agent finds goods that arrived with no receipt posted and posts the receipt behind an approval, so the invoice can match. The Aged GRNI Investigation Agent takes receipts that were posted and never invoiced and explains why. Together they cover procure-to-pay from the dock to the matched invoice.
- How is this different from Microsoft’s Account Reconciliation Agent?
- Microsoft’s agent reconciles subledgers to the general ledger and flags differences. GRNI investigation is a procurement-side job: it reads purchase orders, receipts and the vendor invoice queue to explain one accrual line at a time. They sit at different points of close and can run together.
- What does it need from our environment?
- A sandbox copy of your Finance & Supply Chain Management environment, a security role for the agent scoped to purchase order and receipt inquiry plus receipt cancellation, and your vendor master. We run it there first, on your own GRNI, before anyone talks about production. The readiness review checks the version, environment tier and allowed clients the MCP server needs.
- Where does it stand today?
- It runs on test data in a demonstration environment: listing, classification with evidence, proposing the fix, cancelling a duplicate after approval and reading it back. The Teams approval card and the SharePoint evidence library are designed on Microsoft-documented capabilities and not built yet. We say so on every page.
Turning agents on in Dynamics 365, in detail
Readiness, piloting, governance and audit, and what Microsoft's own agents cover versus a build on your customized F&O.

AI account reconciliation in Dynamics 365: what the agent clears, and the part it hands back
Microsoft's Account Reconciliation Agent clears reconciliation exceptions in bulk across Dynamics 365 Finance. Here's what it handles well, the exceptions it hands back, and how to close that last gap.
Read more3 min read
AI collections in Dynamics 365: what the agent drives, and where the relationship stays human
Microsoft's Finance Agent brings AI to collections in Dynamics 365 — prioritising accounts, drafting outreach, surfacing risk. Here's what it drives well, where the customer relationship stays human, and how to make it run on your policy.
Read more3 min read
AI on top of your ERP: the four layers, and which one actually moves your margin
AI on top of the ERP has become four different things sold to four different buyers. Here's how to tell them apart — and which layer actually moves your margin — on Microsoft Dynamics 365 and Business Central.
Read more4 min read
Business Central AI agents: what the Payables and Expense agents do, and where a custom build takes over
Business Central now ships AI agents — a Payables Agent that reconciles POs and an Expense Agent that checks reports for policy violations. Here's what they do, where they stop, and when a mid-market team needs a custom build.
Read more3 min read
Codifying your procedures as governed business skills for Dynamics 365 agents
Microsoft's 'business skills' let you define your procedures as reusable, governed context for Dynamics 365 agents. Here's how to turn the way your business actually runs into skills an agent can use — and why that's the real work.
Read more3 min read
A Dynamics 365 agent can do anything the user can. Close that gap before you turn it on.
Microsoft's ERP Copilot plugin is GA — and an agent acting for a user can currently do anything that user can do. The role-based controls have no release date. Here's how to close the governance gap before you activate agents on Dynamics 365.
Read more3 min read
Why Microsoft's Dynamics 365 agents stumble on your customized F&O — and the last-mile fix
Microsoft's ERP agents work beautifully on standard Finance & Operations — and stall on the X++ and ISV customizations that make your estate yours. Here's the last-mile fix: exposing your logic as governed MCP Action tools.
Read more3 min read
AI Agent Readiness for Dynamics 365: are you actually ready to turn agents on?
Most teams that can't activate Microsoft's Dynamics 365 agents aren't blocked by the AI — they're blocked by data quality, role design, customizations and governance. Here's the honest readiness checklist.
Read more3 min read