Eight strategic decisions that define the architecture — each chosen to maximize reliability, minimise upgrade risk, and keep data sovereign.
Decision 1
Model-Driven App as primary UI
MDA provides native multi-table data management, Business Process Flows, security roles, and PCF component support out-of-the-box. Canvas-only would require building all of this manually.
Decision 2
Dataverse for biological data — not D365 tables
D365 F&O is optimized for financial/logistics transactions with strict posting rules. Biological event journals need flexible schema, simpler entry, offline sync, and faster iteration — all better served by Dataverse.
Decision 3
D365 as system of record for all money and inventory
Every event with a cost consequence (feed, mortality, chemicals, smolt production) must post to D365 GL with correct dimensions. The MDA triggers these postings but D365 owns the numbers.
Decision 4
Power Automate over X++ for integrations
Only X++ code written is for logic that MUST live inside D365 core. Everything else is Power Automate/Logic Apps — faster to build, easier to maintain, no X++ deployment overhead.
Decision 5
Only 2 X++ extensions — minimise D365 core code
Minimising D365 core code reduces upgrade risk during Microsoft product updates. Both extensions are defensive: one prevents illegal harvest during withdrawal, one enriches GL posting with generation dimension.
Decision 6
Virtual Entities — not data sync — for D365 in MDA
Virtual Entities read D365 data live without copying to Dataverse. This prevents the dual-maintenance problem where the same data becomes inconsistent across two databases.
Decision 7
Azure Data Explorer for environmental time-series
D365 and Dataverse are not optimized for 15-minute sensor data across 130+ devices (~700K rows/month). Azure Data Explorer provides cost-effective columnar storage with sub-second query performance.
Decision 8
No ISV required — 100% Microsoft platform
The full AquaMonitor MDA architecture covers all 80 requirements without third-party platforms. This reduces per-seat costs, eliminates external upgrade dependencies, and keeps all data within Norwegian Azure datacenters.