---
title: "Aged GRNI Investigation Agent for Dynamics 365 Finance & Supply Chain Management — the accrual explained line by line, fixed with a yes"
canonical_url: "https://cognilium.ai/dynamics-365/aged-grni-investigation-agent"
slug: "dynamics-365/aged-grni-investigation-agent"
section: "dynamics-365"
page_type: "pillar"
date_modified: "2026-10-20"
description: "An AI agent for Dynamics 365 Finance & Supply Chain Management that lists aged goods-received-not-invoiced lines by age and value, classifies why each is stuck (duplicate receipt, partial delivery, vendor not yet invoiced) with evidence, proposes the fix, and cancels a duplicate receipt only after a person approves. Runs on test data in a demonstration environment today."
publisher: "Cognilium AI"
author: "Mudassir Marwat"
person_same_as:
  - "https://www.linkedin.com/in/mudassir-marwat/"
  - "https://orcid.org/0009-0008-1927-2598"
  - "https://github.com/mudassirmarwat"
  - "https://medium.com/@mudassir-marwat"
  - "https://www.youtube.com/@mudassir-marwat"
  - "https://dev.to/mudassirmarwat"
  - "https://hashnode.com/@mudassirmarwat"
  - "https://huggingface.co/mudassirmarwat"
  - "https://bsky.app/profile/mudassir-marwat.bsky.social"
  - "https://substack.com/@mudassirmarwat"
  - "https://topmate.io/mudassirmarwat"
  - "https://fueler.io/mudassirmarwat"
  - "https://www.instagram.com/mudassirmarwat/"
  - "https://www.facebook.com/mudassir.marwat"
  - "https://www.reddit.com/user/mudassirmarwat/"
  - "https://www.f6s.com/member/mudassir-marwat"
  - "https://cognilium.ai/founder"
answers:
  - "What is aged GRNI in Dynamics 365?"
  - "Why do GRNI lines get stuck at month-end?"
  - "How do you investigate goods received not invoiced in Dynamics 365 Finance & Supply Chain Management?"
  - "Can an AI agent cancel a duplicate product receipt in Dynamics 365?"
  - "What is the difference between the PO Receipt Chase Agent and the Aged GRNI Investigation Agent?"
  - "How does GRNI investigation differ from Microsoft’s Account Reconciliation Agent?"
  - "What is the status of the Aged GRNI Investigation Agent?"
entities:
  - name: "Microsoft Dynamics 365"
    id: "https://cognilium.ai/#entity-dynamics365"
    url: "https://www.microsoft.com/en-us/dynamics-365"
    same_as:
      - "https://www.wikidata.org/wiki/Q27556059"
      - "https://en.wikipedia.org/wiki/Microsoft_Dynamics_365"
  - name: "Microsoft"
    id: "https://cognilium.ai/#entity-microsoft"
    url: "https://www.microsoft.com"
    same_as:
      - "https://www.wikidata.org/wiki/Q2283"
      - "https://en.wikipedia.org/wiki/Microsoft"
  - name: "Microsoft Dynamics 365 Business Central"
    id: "https://cognilium.ai/#entity-businessCentral"
    url: "https://www.microsoft.com/en-us/dynamics-365/products/business-central"
    same_as:
      - "https://www.wikidata.org/wiki/Q58883729"
related:
  - "https://cognilium.ai/dynamics-365"
  - "https://cognilium.ai/dynamics-365/po-receipt-chase-agent"
  - "https://cognilium.ai/dynamics-365/agent-readiness-review"
  - "https://cognilium.ai/dynamics-365/agents"
  - "https://cognilium.ai/dynamics-365/manufacturing"
  - "https://cognilium.ai/dynamics-365/mcp-server"
  - "https://cognilium.ai/agentic-erp"
  - "https://cognilium.ai/dynamics-365/consulting"
---

# Aged GRNI Investigation Agent for Dynamics 365 Finance & Supply Chain Management — the accrual explained line by line, 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.


## 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.

The duplicate: Two receipts posted for one delivery. The invoice matched one; the other will never be invoiced. Safe to cancel, once someone is sure.

The partial: The vendor shipped half and will ship the rest. The receipt is right, the invoice is coming. Nothing to fix, only to recognise.

The silent vendor: 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.”

### Step 1 — 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.

### Step 2 — 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.

### Step 3 — 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.

### Step 4 — 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.


## What happens once the receipt is posted

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. https://cognilium.ai/dynamics-365/po-receipt-chase-agent


## Where it stands today, exactly

A status against everything we show.

### List aged GRNI by age and value, classify each line with evidence — Working

Runs today on test data in a demonstration environment.

### Propose and, after approval, cancel a duplicate receipt and read it back — Working

Same environment, same demonstration.

### Teams approval card and a SharePoint evidence library for each line — Designed

Designed on Microsoft-documented capabilities; not built yet.

### Vendor follow-up drafts for the silent-vendor lines — Built to order

Engineering 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. |


## 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.


---

Canonical HTML: https://cognilium.ai/dynamics-365/aged-grni-investigation-agent
