We’re migrating 10 years of inventory transaction history from our legacy WMS to D365 Supply Chain Management. The regulatory requirement is to maintain complete audit trails for all inventory movements, including receipts, issues, transfers, and adjustments. However, we’re concerned about performance impact - that’s approximately 15 million inventory transaction records.
The compliance team insists on migrating every transaction with full audit fields (who, when, why, approval status). The IT team argues this will severely impact D365 performance and suggests keeping detailed history in an archive database with only summarized balances in D365. Has anyone dealt with similar audit compliance requirements during inventory migration? How do you balance regulatory needs with system performance?
Before committing to either extreme (full migration vs. summary-only), validate these constraints:
Confirm regulatory scope: Most audit regulations (SOX, FDA 21 CFR Part 11, ISO) require retrievability of records, not necessarily operational accessibility in the live system. Get written clarification from your compliance team and legal counsel on whether an archive database satisfies the requirement — it frequently does.
Assess D365 SCM inventory transaction table growth: Query InventTrans, InventTransOrigin, and InventSettlement in any existing D365 environment. 15M records migrated at once will stress index maintenance and MRP explosion (verify partition behavior in your version).
Check your D365 SCM license tier: Advanced Warehouse Management (WHS) environments carry additional transaction overhead vs. basic inventory. Confirm which modules are active.
Baseline performance benchmarks: Run InventAgeDim and cost rollup jobs against a representative data volume in a sandbox before any production decision.
Validate custom audit fields: D365 SCM’s standard InventTrans does not natively carry “approval status” or free-text “why” fields. Migrating those requires custom extensions — scope this before finalizing the approach.
Recommended Migration Sequence
Define the compliance cut point: Agree on a date threshold (e.g., transactions < 3 years old = active in D365; older = archive). Most regulations define a retrieval SLA, not a system-of-record requirement.
Migrate open/unsettled transactions fully: Any transaction with open inventory value, pending cost settlement, or active lot/serial traceability must land in D365 InventTrans with full lineage. Use InventTransferJournal and InventAdjustmentJournal data entities via DMF (DIXF).
Load summarized on-hand balances for closed periods: Use the InventSum and InventDim data entities to load net positions for periods beyond your cut point. This keeps D365 operationally clean.
Migrate full audit history to an archive layer: Azure SQL or Azure Synapse are natural choices if you’re in the Microsoft stack. Expose via Azure Data Share or a read-only Power BI report linked from D365 to satisfy auditor access requirements.
Implement D365 Database Log (SysDataBaseLog) going forward: Configure via System administration > Database log setup for InventTrans entity changes. This satisfies “who/when” requirements for post-migration activity.
Validate cost accounting reconciliation: Run InventCostTrans reconciliation reports post-load. Summarized historical balances must agree to your legacy WMS closing balances by item/warehouse/period.
UAT with compliance team: Have auditors execute sample trace requests — e.g., trace a specific lot number end-to-end — against both D365 and the archive before go-live sign-off.
Rollback Procedure
Do not migrate directly to production: All DMF loads run against a staging environment first; promote only after reconciliation passes.
If a partial load corrupts InventSettlement linkages, use Inventory close cancellation (InventCloseCancel job) to reverse the affected period — verify this is available in your version before relying on it.
Retain the legacy WMS in read-only mode for a minimum of 90 days post-go-live. This is your hard rollback for audit queries.
DMF staging table records persist post-import; use Job history cleanup selectively so you retain the import manifest for audit evidence.
Bottom line: IT and compliance are both partially right. The hybrid architecture — active transactions in D365, full audit trail in a governed archive with documented retrieval SLA — is the standard resolution pattern for this conflict. The key is getting compliance sign-off on archive accessibility before migration design is locked.
This draft is based on general Microsoft Dynamics 365 knowledge. It has not been verified against your specific version and environment. Practitioners: verify the steps and share your experience below.
This is a common tension in regulated industries. The key question is: what does the regulation actually require? Most regulatory frameworks require that audit trails be accessible and immutable, but they don’t mandate that everything must be in the operational ERP system. You can maintain detailed transaction history in a separate compliance database (even a read-only SQL database) that meets audit requirements, while keeping only active inventory and recent transactions (last 2-3 years) in D365 for operational performance.
From an audit perspective, what matters is data integrity, traceability, and accessibility. If you archive older transactions, ensure the archive system has proper controls - no one should be able to modify historical data, and auditors need reasonable access to query the data. We implemented a solution where D365 has 3 years of transactions, and older data is in Azure SQL with a Power BI interface for audit queries. Auditors were satisfied because they could still trace any item’s complete history.
That makes sense. But how do you handle queries that need to span both systems? For example, if an auditor wants to trace a product batch from initial receipt (8 years ago) through current inventory? Do you have integration between the archive and D365, or is it manual correlation?
We built a unified reporting layer using Power BI that queries both D365 (via Dataverse) and the archive database. For most operational queries, users only see D365 data. For audit or compliance queries, the report automatically includes archive data. The key is maintaining consistent data structures and using the same business keys (item number, batch ID, transaction ID) across both systems. This gives auditors a seamless view without performance impact on operational D365.
From a performance perspective, 15 million transaction records in InventTrans would definitely cause issues - slower queries, larger database size, more expensive Azure SQL tier needed. Even with proper indexing, aggregate queries for inventory valuation would be slow. The archive approach is sound, but make sure your cutover strategy is clean. Migrate opening balances as of the cutover date into D365 (these become the starting point), and keep full transaction detail in the archive for historical reference.
Another consideration - different regulations have different retention requirements. FDA 21 CFR Part 11 requires electronic records to be retained for the lifecycle of the product plus certain years. GDPR has different requirements. Make sure your archive retention policy matches the most stringent regulation you’re subject to. Also, document your archival process thoroughly - auditors will want to see evidence that archived data hasn’t been tampered with. Consider using immutable storage (Azure Blob with WORM policy) for the archive.