Back to Blog
Published:
Last Updated:
Fresh Content
Procure-to-Pay Agent OperationsFoundational guide

Why do received goods sit uninvoiced, and what can an agent actually do about it?

7 min read
1,506 words
high priority
Ali Ahmed

Ali Ahmed

AI Solutions Engineer, Cognilium AI

TL;DR

Dynamics 365 already matches product receipts to invoices hourly or daily. The balance that will not clear is the residue the automation cannot resolve.

Because Dynamics 365 already matches what it can. Posted product receipts are matched to invoice lines in the background, hourly or daily, until the quantities agree. The balance that will not clear is the residue the automation cannot resolve on its own — and the person who knows why is usually not a Dynamics 365 user at all.

What is actually sitting on the books?

Two accounts, and Microsoft names them in its own posting example. When a product receipt is posted, the entry is:

DescriptionAccount
"Purchase, Product receipt purchase"Uninvoiced receiptsdebit
"Purchase, Product receipt purchase offset"Accrued purchasescredit

That is the thing people call GRNI — goods received, not invoiced. In Dynamics 365 it is not one figure with that label; it is a pair of postings that stay open until the vendor invoice arrives and matches. If you have been searching the product for a "GRNI" account, that is why you could not find one.

The liability is real and it is deliberate. The goods are yours, the obligation exists, and the ledger says so before any invoice has been seen. Nothing is wrong with the balance existing. The question is only ever why a particular line is still in it.

Doesn't Dynamics 365 already match these automatically?

Yes. This is the part most discussions of GRNI skip, and it changes what is left to solve.

"You can automatically match posted product receipts to invoice lines when a three-way matching policy exists. The process continues until the matched product receipt quantity equals the invoice quantity."

And it is not a manual run:

"The process runs in the background, either hourly or daily."

The schedule is yours to set, at Process automation > Background processes > Match vendor invoice lines with product receipts, and the behaviour is governed by the Automatically match product receipts to invoice lines parameter.

There is even a stop condition, which tells you the designers expected failure: "You can set the maximum number of times the system tries to match product receipts to an invoice line before it stops."

### Read that stop condition again A retry limit exists because some lines never match, no matter how many times the job runs. The product does not pretend otherwise. Those lines are the entire subject of this cluster.

So any pitch that an agent will "automate the matching" is describing a feature you already own. That matters for scoping, and it is the honest starting point.

Which lines are actually left, then?

The ones where the quantities genuinely disagree, or where no receipt exists to match against.

Three-way matching is specific about what it compares: "The invoice net unit price is compared to the purchase order's net unit price and the matching product receipt quantity is compared to the invoice quantity." Where those agree within tolerance, the automation closes the line. Where they do not, it cannot.

And one setting removes the receipt from the question entirely:

"Two-Way Match — The verification of invoice lines is required but only the purchase order and the supplier's invoice documents are involved in the verification. The product receipt isn't factored into the matching validations."

If your line matching policy is two-way, the receipt was never part of the test, so a mismatch between what arrived and what was billed will not be caught here at all. Check the policy before blaming the balance — it is set per legal entity and can be overridden per vendor, item or line.

The residue divides into shapes a person can recognise: a receipt posted twice, a partial delivery behaving exactly as it should, a delivery the vendor has genuinely not invoiced yet, and a receipt recorded against the wrong line. Each needs a different answer, and only the first and last are errors.

Where do you look for these in the product?

There is a built-in view, and it is easy to miss because of where it lives.

"The Documents not invoiced section contains grids that show documents that are awaiting vendor invoices. The Open purchase orders grid shows all purchase orders that aren't yet fully invoiced."

It sits in the vendor invoice automation workspace, and it includes an Invoice now action to create the vendor invoice directly from a purchase order. It is an accounts-payable workspace, which is why procurement teams often do not know it exists.

What it gives you is the list. What it does not give you is the reason — and the reason is the expensive part.

Why can't an agent simply go and fix it?

Because of one sentence in Microsoft's security documentation, and it is the most important sentence in this whole subject.

"Every MCP request requires an authenticated user. The MCP server doesn't provide an anonymous or shared-service path for accessing finance and operations data."

There is no side door. Microsoft is explicit that the connector changes nothing about who may do what: "It doesn't create a separate security boundary or grant permissions independently from the application", and "The MCP server doesn't elevate privilege."

And the consequence for process design is immediate. The people who know whether the goods actually arrived are frequently the ones with no Dynamics 365 access — the plant supervisor, the site foreman, the goods-in clerk at a third-party warehouse. An agent cannot borrow an identity for them, because the platform does not offer one.

What it does offer is two patterns, named: "For chat or delegated agents, set the agent configuration to run on behalf of the user who is chatting with the agent", and "For autonomous agents… The autonomous agent has its own identity, and that identity is the authenticated user making the request."

Either way the action is attributable: "An action that an agent takes through the MCP server is therefore attributable to the user who initiated the request, similar to an action that the same user takes in the finance and operations client."

So what can an agent actually do?

Three things, and the middle one is where the value sits.

It can gather and explain. Reading the open lines, their age, their value and their shape is ordinary work for an agent, and it is the part people currently do by exporting to a spreadsheet.

It can carry the question to the person who knows, and carry the answer back. The confirmation has to come from a human in a channel they already use, and the posting has to happen under an identity the ERP recognises. Those are two different steps and the gap between them is the engineering.

It can post, after a person confirms, and read the record back. Because "Business logic, validations, and workflows aren't bypassed", a posting made this way behaves exactly like one made in the client — the same validations, the same workflow, the same audit position.

### What this is, honestly We have built two agents on this ground and they run on test data. One finds overdue purchase-order lines, groups them by buyer and posts the receipt after a confirmation. The other works through old uninvoiced receipts and proposes a fix for the safe ones. The Teams confirmation card and the Outlook notice are designed and in build, not shipped. And no published results exist for this problem anywhere — ours or anyone's. A scoped, read-only look at your own open lines is the honest first step.

About Cognilium Cognilium builds AI optimization apps for Microsoft Dynamics 365 — companion apps that optimize the pricing, inventory, warehouse and planning decisions your ERP manages but can't optimize. Dynamics is your system of record. Cognilium is your system of intelligence. https://cognilium.ai · https://www.linkedin.com/company/37180269/

Agentic ERP. We build turnkey AI optimization apps for Dynamics 365 — sidecar applications that run in your own Azure tenancy and solve the calculations a standard ERP is not built to compute. Built on Azure OpenAI, Microsoft Fabric and Copilot Studio. We build these on request, against your data and your environment.

More on the boundary between what Copilot does and what you build: Agentic ERP on Dynamics 365.

If you have a balance of uninvoiced receipts nobody can explain, the useful first step is a read-only look at the oldest lines and their shape. Bring the list to a 15-minute call.

Sources

Sources and fact-check
#§ClaimTierPrimary sourceVerdict
11The posting pair — "Purchase, Product receipt purchase" → Uninvoiced receipts, "Purchase, Product receipt purchase offset" → Accrued purchasesT1 — read off Microsoft's own posting table, account names character-exactacquire-assets-procurementPASS
21There is no single account called "GRNI"T2 — ours, and BOUNDED to the pages read. Stated as why a search fails, not as a claim about every F&O configuration. Account names are configurable per chart of accounts—PASS
32"You can automatically match posted product receipts to invoice lines when a three-way matching policy exists. The process continues until the matched product receipt quantity equals the invoice quantity"T1 — verbatimauto-vendr-invc-processPASS — the pillar's spine
42"The process runs in the background, either hourly or daily"T1 — verbatimSame pagePASS
52The path Process automation > Background processes > Match vendor invoice lines with product receipts, and the Automatically match product receipts to invoice lines parameterT1 — verbatim, not invented navigation; Microsoft publishes both stringsSame pagePASS
62"You can set the maximum number of times the system tries to match product receipts to an invoice line before it stops"T1 — verbatimSame pagePASS
72A retry limit implies the product expects some lines never to matchT2 — ours, a reading of claim 6, written as a reading—PASS
83"The invoice net unit price is compared to the purchase order's net unit price and the matching product receipt quantity is compared to the invoice quantity"T1 — verbatimmatching-validationPASS
93"Two-Way Match — … The product receipt isn't factored into the matching validations"T1 — verbatimSame pagePASS
103Policy is per legal entity and overridable per vendor, item or lineT1 — the page documents the Allow matching policy override field and the Matching policy pageSame pagePASS
113The four shapes of residue (duplicate, partial, not yet invoiced, wrong line)T2 — ours. A practitioner's taxonomy, not Microsoft's, and the article does not attribute it to anyone—PASS
124"The Documents not invoiced section contains grids… The Open purchase orders grid shows all purchase orders that aren't yet fully invoiced"T1 — verbatimvendor-invoices-workspacePASS
134The Invoice now action, and that it sits in the vendor invoice automation workspaceT1 — verbatimSame pagePASS
145"Every MCP request requires an authenticated user. The MCP server doesn't provide an anonymous or shared-service path for accessing finance and operations data"T1 — verbatimmcp-securityPASS — the cluster's spine
155"It doesn't create a separate security boundary or grant permissions independently from the application"; "The MCP server doesn't elevate privilege"T1 — verbatim ×2Same pagePASS
165The two named patterns — delegated "on behalf of the user who is chatting", and autonomous with "its own identity"T1 — verbatim ×2Same pagePASS
175"attributable to the user who initiated the request, similar to an action that the same user takes in the finance and operations client"T1 — verbatimSame pagePASS
185The people who know what arrived often have no Dynamics 365 accessT2 — ours, a statement about how plants and third-party warehouses are staffed. No figure, no study, offered as the common case rather than a measured one—PASS
196"Business logic, validations, and workflows aren't bypassed"T1 — verbatimSame pagePASS
206What our two agents do, and that they run on test dataT2 — capability, present tense, with maturity stated. Per the source's own guardrail: "Runs on test data today"—PASS
216The Teams card and Outlook notice are designed and in build, not shippedT2 — ours, and this is a REQUIRED disclosure, not an optional one—PASS — see the note

Tier summary: 15 × T1 (all verbatim), 6 × T2 — 0 × T4.

### 🔴 The guardrail this article was written against The internal source document for this cluster carries a "do not say" table written by the person who owns the claims. Four of its rules bind this article directly: | Rule | How this article complies | |---|---| | Never "Teams and Outlook are live" | §6 states "designed and in build, not shipped" in its own callout | | Never "least-privilege" or "locked down to a role" | The article says "works within the signed-in user's permissions" in Microsoft's own words and never uses the banned phrasing | | Never a customer name, saving or percentage | None appears. §6 states that no published results exist for this problem, ours or anyone's | | Never "GRNI Chaser" — a competitor's product name | Not used. The agent is named PO Receipt Chase Agent |

🔴 No pricing. No rate, pack, currency or cost figure appears. Microsoft's posting example contains the figure 1,600.00 as an illustrative amount; it is referenced as a debit/credit pair and the number itself is not reproduced in the body.

No unbounded absence claimed. "No anonymous or shared-service path" and "the product receipt isn't factored in" are Microsoft's own sentences about its own product. The one absence of ours — that no published results exist for this problem — is sourced to a market scan dated 2026-10-20 and is stated as what that scan found.

No figures of ours. No volume, no accuracy, no days saved, no customer.

Share this article

Ali Ahmed

Ali Ahmed

AI Solutions Engineer, Cognilium AI

Ali Ahmed is an AI Solutions Engineer at Cognilium AI.

Applied AI AgentsAgentic SystemsRetrieval-Augmented Generation (RAG)LLM Product Engineering
Next in this series
What are Uninvoiced receipts and Accrued purchases in Dynamics 365?
Chapter 1 · 5 min
In short

Key takeaways

  • Dynamics 365 already matches posted product receipts to invoice lines in the background, hourly or daily, until the quantities agree. An agent that "automates the matching" is describing a feature you own.
  • A retry limit exists in that automation, which tells you the product expects some lines never to match. Those lines are the real problem.
  • What people call GRNI posts to two accounts — Uninvoiced receipts and Accrued purchases — so there is no single account with that name to look for.
  • Under a two-way matching policy the product receipt is not part of the test at all, so a quantity mismatch is not caught there.
  • *The product ships a Documents not invoiced view* in the vendor invoice automation workspace. It gives you the list, not the reason.
  • There is no anonymous path into the ERP. Microsoft states it plainly, so the person who knows what arrived needs a mediated route, not a borrowed login.
What goes wrong

Common mistakes to avoid

  • Scoping an agent to do the matching. The background job already does it. Scope it to the residue.
  • Reading the balance as an error. The liability is correct by design; only particular lines are wrong.
  • Assuming three-way matching is on. It is a policy per legal entity, overridable per vendor and item.
  • Planning a confirmation step for someone with no ERP identity. The platform offers no shared or anonymous path, so that step needs designing rather than assuming.

Terms in this article

Definitions in the Cognilium glossary.

Frequently Asked Questions

Find answers to common questions about the topics covered in this article.

Two accounts, and Microsoft names them in its own posting example. When a product receipt is posted, the entry is:
Yes. This is the part most discussions of GRNI skip, and it changes what is left to solve.
The ones where the quantities genuinely disagree, or where no receipt exists to match against.
There is a built-in view, and it is easy to miss because of where it lives.
Because of one sentence in Microsoft's security documentation, and it is the most important sentence in this whole subject.
It can gather and explain. Reading the open lines, their age, their value and their shape is ordinary work for an agent, and it is the part people currently do by exporting to a spreadsheet.

Still have questions?

Get in touch with our team for personalized assistance.

Contact Us

Still have a question this did not answer?

The person who wrote this article answers these. Describe your setup and what you are stuck on — you will get a straight answer, including where we think the approach is wrong.

Questions on this?

Talk to an engineer

Schedule a call