Solution Architecture · NHA-ARCH-AQUA-2026-001

Four-Layer Architecture

D365 F&O as system of record · AquaMonitor + Finance App on Dataverse · Power BI analytics · Agentic AI automation

4
Platform Layers
2
X++ Extensions
9
Virtual Entities
16
Work Packages
▼ scroll

Architecture Layers

4
Agentic Automation Layer
🤖 Copilot Studio Agents · AI Builder · Autonomous Workflows
AI agents orchestrate cross-platform operations — automated biomass estimation, predictive sea lice alerts, feed optimization recommendations, regulatory filing automation, and proactive maintenance scheduling. Agents consume data from all layers and trigger actions in D365, Dataverse, and Power Automate.
Copilot StudioAI Builder ModelsAutonomous TriggersCross-Layer Orchestration
3
Analytics & Reporting Layer
Power BIPower BI · Microsoft Fabric · Financial Reporter
Real-time dashboards across 8 report domains. Shared semantic model blending Dataverse (biological ops), D365 OData (finance/logistics), and Azure Data Explorer (environmental time-series). All reports are embedded within AquaMonitor MDA pages via Power BI Embedded.
Power BI EmbeddedAzure Data Explorer (DirectQuery)Shared Semantic Model8 Reports · 14 DAX Measures
2
Dataverse Extension Layer
DataverseDataverse · 28 Tables · 9 Virtual Entities · Power Automate · Azure IoT
Unified extension platform built on Dataverse — housing both the aquaculture operations app and the finance app alongside shared services: 9 Virtual Entities for live D365 data, 8 Power Automate flows for regulatory & write-back, and IoT Hub integration for sensor telemetry.
Dataverse 28 Tables9 Virtual Entities8 Power Automate FlowsOffline Canvas AppIoT Hub + Stream Analytics
Model-Driven App
🐟 AquaMonitor MDA
Primary interface for all biological aquaculture operations — smolt production, sea farming, biomass monitoring, sea lice & fish health, and harvest coordination.
Biological OpsHarvest BPFOffline Mobile
Explore AquaMonitor →
Model-Driven App
💰 NordHav Finance App
Aquaculture-specific financial management — IAS 41 biological asset accounting, Fish Generation P&L, grunnrenteskatt calculations, and cost-per-kilogram analysis.
IAS 41 / NRS 8Generation P&LGrunnrenteskatt
Explore Finance App →
1
System of Record — Finance & Logistics
D365 F&ODynamics 365 Finance & Operations · Cloud · Azure North Europe
All financial transactions, inventory movements, production orders, procurement, and regulatory reporting flow through D365 F&O. Fish Generation financial dimension enables lifecycle P&L per batch. Catch-weight items for live fish inventory. Full Norwegian localization: SAF-T, MVA, EHF, A-melding, resource rent tax.
16 Modules In ScopeFish Generation DimensionCatch-Weight ItemsSAF-T · MVA · EHF · A-meldingGrunnrenteskatt

Virtual Entity + OData Connectivity

flowchart LR subgraph D365["D365 F&O"] INV["InventSiteEntity\nInventBatchEntity"] PO["ProdProductionOrderEntity\nTransferOrderEntity"] ASSET["EntAssetObjectEntity\nEntAssetWorkOrderEntity"] FIN2["GL Transactions\nVendor Invoices"] end subgraph VE["Dataverse Virtual Entities\n(read-only, live sync)"] VE1["[VE] Sites & Batches"] VE2["[VE] Production & Transfer"] VE3["[VE] Assets & Work Orders"] VE4["[VE] Quality Orders"] end subgraph MDA["AquaMonitor MDA"] SCREEN["Site / Pen screen\nshows D365 site, batch"] HARV2["Harvest screen\nshows Prod Orders"] TREAT["Treatment screen\nlinks to D365 WO"] end subgraph WRITEBACK["Write-back via OData / Power Automate"] WB1["Post GL Journal\n(mortality cost)"] WB2["Release Prod Order\n(harvest)"] WB3["Post Inv Journal\n(feed consumption)"] end INV-->VE1-->SCREEN PO-->VE2-->HARV2 ASSET-->VE3-->TREAT MDA-->WB1-->FIN2 MDA-->WB2-->PO MDA-->WB3-->INV style D365 fill:#071e38,stroke:#06d6a0,color:#d4eaf5 style VE fill:#071e38,stroke:#48cae4,color:#d4eaf5 style MDA fill:#071e38,stroke:#00b4d8,color:#d4eaf5 style WRITEBACK fill:#071e38,stroke:#fca311,color:#d4eaf5

Key Design Decisions

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.

16 Work Packages · ~34 Person-Weeks

Calendar duration: ~14 weeks with parallel execution across 5.5 FTE. AI agents build 70% of platform components — human effort focuses on integration, validation, and go-live. Critical path: WP-1 → WP-2 → WP-4/5/6 → WP-16.

WP-1
Dataverse Schema
28 tables, relationships, views · 1 week · AI-generated from schema.json → Architect review
WP-2
MDA Core Framework
All screens, navigation, security roles · 2 weeks · AI-built app → Sr Dev UX validation
WP-3
Freshwater & Smolt Modules
Tank, egg, grading, vaccination, degree-day · 1 week · AI-built → Dev validation
WP-4
Sea Operations Modules
Biomass, mortality, weight, pen ops, env events · 1 week · AI-built → Dev validation
WP-5
Sea Lice & Fish Health
Lice count, treatments, prescriptions, welfare · 1 week · AI-built → Dev validation
WP-6
Harvest BPF
Harvest Planning, 7-stage gate, site closeout · 1 week · AI-built BPF → D365 integration review
WP-7
Offline Canvas App
Sea-site mobile (mortality, lice, observations) · 2 weeks · AI scaffold → offline sync testing
WP-8
D365 Virtual Entities
9 VEs: InventSite, ProdOrder, TransferOrder, Asset · 1 week · AI-configured → connectivity test
WP-9
X++ Withdrawal Block
Hard-block harvest PO release on active prescription · 1 week · AI-generated code → code review + test
WP-10
X++ Generation Dimension
Auto-inject Fish Gen dim on feed/chemical journals · 1 week · AI-generated → code review + test
WP-11
AKVA IoT Integration
IoT Hub, Stream Analytics, Logic App, D365 Inv Journal · 4 weeks · Physical devices + external APIs
WP-12
Environmental IoT
Sensor pipeline → Azure Data Explorer + Dataverse · 3 weeks · Sensor provisioning + ADX setup
WP-13
Regulatory Automation
BarentsWatch, Altinn, Mattilsynet Power Automate flows · 3 weeks · External API compliance
WP-14
Power BI Aqua Suite
8 reports + dashboard embedding in MDA · 2 weeks · AI-built reports → data validation
WP-15
Historical Data Migration
ADF: FishTalk/AquaManager → Dataverse · 4 weeks · Legacy mapping + Biology team review
WP-16
UAT & Go-Live
User acceptance testing, training, go-live · 6 weeks · Full team + NordHav

5.5 FTE Hybrid Team (AI + Human)

AI agents handle build; humans validate, integrate, and train. Consultant FTE reduced ~50% vs traditional model.

Power Platform Architect
WP-1, WP-2, WP-8 — AI output review + governance
1.0
Power Apps Dev (Senior)
WP-2, WP-6, WP-7 — validate AI-built apps
0.5
Power Apps Dev (Mid)
WP-3, WP-4, WP-5 — validate AI-built modules
0.5
D365 F&O Consultant
WP-6, WP-8, WP-9, WP-10 — code review + integration
1.0
Azure Integration Dev
WP-11, WP-12, WP-13, WP-15 — physical IoT + external APIs
1.0
Power BI Developer
WP-14 — validate AI-built reports + semantic model
0.5
NordHav Biology SME
WP-3–6, WP-15, WP-16 (internal)
0.5
NordHav IT
IoT provisioning (internal)
0.5

Deep-dive into each platform layer

Explore every layer — from D365 modules and custom apps to integrations, analytics, and agentic automation.