16 D365 modules configured for Norwegian aquaculture — with Fish Generation dimension, catch-weight items, and full SAF-T/MVA/EHF localization.
All 441 RFP requirements answered with 100% coverage. Click any card to view the detailed requirement-by-requirement response.
| Capability | Type | Req | Detail |
|---|---|---|---|
| Catch-Weight Items for Live Fish | NATIVE | AQU-040 | InventTable.CWEnabled=Yes. CW unit = kg net weight, tracking unit = individual fish. Batch tracking per generation. |
| One Warehouse per Sea Pen | CONFIG | AQU-010 | Each pen mapped to its own InventLocation. Enables pen-level inventory balance queries and biomass calc. |
| Fish Generation Batch Tracking | X++ EXT | AQU-041 | InventBatch.FishGeneration field injected via X++ extension on InventBatchEntity. Maps to nha_generation in Dataverse. |
| Inter-Site Transfer Orders | NATIVE | AQU-042 | Standard Transfer Orders. AquaMonitor freshwater screen triggers Transfer Order creation via OData POST. |
| Inventory Counting Journals | NATIVE | AQU-043 | Annual pen count-back supports regulatory biomass audit. Triggered from harvest close-out. |
| Feed Stock Inventory (Barge) | CONFIG | AQU-044 | Dedicated warehouse per AKVA feed barge. IoT consumption postings reduce stock in real time. |
| Chemical/Medication Stock | NATIVE | AQU-045 | Controlled substance tracking with lot/batch dates. Expiry management. Links to treatment records. |
| Catch-Weight Inventory Adjustment | NATIVE | AQU-046 | CW adjustment journals for mortality corrections and grading re-classification events. |
| Capability | Type | Req | Detail |
|---|---|---|---|
| Harvest Production Orders | NATIVE | AQU-055 | Harvest BOM: Live fish IN → Whole round fish OUT. Production Order triggered by AQUA-FLOW-007 from BPF Stage 6. |
| Smolt Production (RT-SMOLT) | CONFIG | AQU-056 | Route: Incubation → Alevin → Fry (freshwater) → Smolt transfer. Degree-day gates between stages. |
| Grow-out Route (RT-HOG) | CONFIG | AQU-057 | Simplified grow-out route tracking seawater phase. Marks feed and treatment resource consumption. |
| X++ Withdrawal Block | X++ EXT | AQU-058 | Extension on ProdUpdRelease.checkDocument(). Queries nha_withdrawal via Dataverse API. Throws err if active period. |
| Production BOM per Generation | CONFIG | AQU-059 | Each generation (cohort) has its own BOM version. Enables per-cohort cost accumulation via Fish Generation dimension. |
| Resource Consumption (Feed/Chemical) | NATIVE | AQU-060 | Route card journals post feed and chemical costs to the production order WIP cost. Auto-dimension-injected. |
| Co-Product Output (processing grades) | NATIVE | AQU-061 | Filleting orders produce co-products (fillet, offcut, roe) using standard D365 co-product BOM lines. |
| Production Scheduling (CRP) | NATIVE | AQU-062 | Capacity requirements planning for slaughterhouse capacity slots. Integration with 3rd-party slaughterhouse via EDI. |
| Capability | Type | Req | Detail |
|---|---|---|---|
| Sea Pen Asset Register | CONFIG | AQU-065 | Each pen is an EntAssetObject with volume, net type, installation date. Net replacement schedules trigger preventive WOs. |
| Vessel & Well-Boat Register | CONFIG | AQU-066 | Vessels registered as assets with maintenance cost centre. Harvest transport work orders link to vessels. |
| AKVA Feed Barge Asset | CONFIG | AQU-067 | Each AKVA iFeed barge its own asset with IoT maintenance alerts. Service work orders from sensor threshold breaches. |
| Preventive Maintenance Plans | NATIVE | AQU-068 | Calendar-based and counter-based maintenance schedules. Nets replaced per dive inspection output. |
| Treatment Work Orders | VE READ | AQU-069 | AquaMonitor treatment screen reads WO status via Virtual Entity (EntAssetWorkOrderEntity). Withdrawal tracker uses WO close date. |
| Spare Parts Inventory | NATIVE | AQU-070 | Pens, nets, mooring and electrical spare parts managed in D365 items. Consumed on WO line posting. |
| Farm License as Intangible Asset | CONFIG | AQU-071 | Aquaculture licenses registered as intangible assets. Straight-line depreciation. Grunnrenteskatt base asset register. |
| Asset KPI (OEE / Uptime) | NATIVE | AQU-072 | Asset KPI configurations for pen net uptime, vessel availability. Feeds into Power BI Asset KPI report. |
| Capability | Type | Req | Detail |
|---|---|---|---|
| Feed Purchase RFQ & Order | NATIVE | AQU-075 | Annual feed tender via D365 RFQ workflow. Feed item with supplier price list. PO visible in AquaMonitor feed screen via [VE]. |
| Smolt & Egg Procurement | CONFIG | AQU-076 | Smolt as inventory item with batch/lot number = generation ID. Supplier quality certificate required on PO line. |
| Chemical & Medication Procurement | NATIVE | AQU-077 | Controlled substance PO requires vet approval attachment. Lot expiry enforced. Links to prescription on PO receipt. |
| Cleaner Fish Procurement | CONFIG | AQU-078 | Wrasse/lumpsucker as live inventory items. Separate site/pen. CW-enabled. Procurement integrated with lice management approval. |
| EHF Electronic Invoicing (Inbound) | NATIVE | REQ-F-003 | D365 Electronic Reporting EHF format. Receives EHF invoices from Norwegian suppliers via Peppol access point. |
| 3-Way Matching (PO/Receipt/Invoice) | NATIVE | REQ-F-004 | Invoice matching policy set to 3-way for all procurement categories above tolerance threshold. |
| Supplier Certificates (PdsMRC) | NATIVE | AQU-079 | Product compliance certificates (ASC, GlobalG.A.P, organic) tracked on supplier-item. Expiry alerts on PO creation. |
| Purchase Price Trade Agreements | NATIVE | REQ-F-005 | Annual feed price agreements per supplier and feed type. Price tolerance warning on variance. |
| Vendor Bank Account (IBAN/BBAN) | NATIVE | REQ-F-006 | Norwegian bank account formats (BBAN 11-digit). Payment journal ISO 20022 pain.001 via DnB/Sparebank. |
| Capability | Type | Req | Detail |
|---|---|---|---|
| Fish Generation Financial Dimension | X++ EXT | AQU-020 | Custom D365 financial dimension "FishGeneration" auto-injected on all InventJournalTrans, ProdJournalBOM, and vendor invoices via X++ extension on LedgerDimensionFacade. Enables per-cohort P&L. |
| IAS 41 Biological Asset Accruals | CONFIG | AQU-021 | Periodic journal reversals to accrue estimated biomass value change. Fair-value delta posted to P&L (IAS 41 requirement for IFRS reporters). Annual actuary input. |
| SAF-T Financial Export | NATIVE | REQ-F-001 | Norwegian SAF-T (Standard Audit File — Tax) via D365 Electronic Reporting GER configuration. Annual and on-demand export. Validated by Skatteetaten schema. |
| MVA (Norwegian VAT) | NATIVE | REQ-F-002 | Norwegian tax codes configured: 25% (standard), 15% (food), 0% (export). Altinn MVA-melding submission via AQUA-FLOW-004. |
| Grunnrenteskatt (Resource Rent Tax) | CONFIG | AQU-022 | Spot price mechanism for ground rent calculation. License asset fair value feeding tax base. GL accounts configured per 2023 legislation (Havbruksskatt). |
| A-melding (Payroll Reporting) | NATIVE | REQ-H-001 | Monthly A-melding submissions to Altinn for all employees. Norwegian payroll localization in D365 HR module. |
| Multi-Company / Intercompany | GAP | REQ-F-007 | Not applicable. Project decision: single legal entity (NordHav Aquaculture AS, NHA). All aquaculture, processing, and administrative operations consolidated in one entity. Intercompany automation not required. |
| Capability | Type | Req | Detail |
|---|---|---|---|
| Catch Certificates (EU export) | NATIVE | AQU-080 | PdsMRCItemCertification for EU Catch Certificate (EC 1005/2008). Generated on finished goods batch. Visible via [VE] in AquaMonitor harvest screen. |
| Veterinary Inspection Certificates | CONFIG | AQU-081 | Quality order at slaughterhouse receipt with vet inspection test group. Passed/failed determines freeze/release of production output. |
| Supplier Quality Orders (Smolt, Feed) | NATIVE | AQU-082 | Quality orders triggered on smolt and feed receipt. Certificate of Analysis required. Block setting prevents consumption before QO pass. |
| Non-Conformance Tracking | NATIVE | AQU-083 | NCR tracking for disease outbreaks at supplier, medication defects, packaging failures. Linked to cost of quality analysis in PBI. |
| Traceability (Farm-to-Fork) | NATIVE | AQU-084 | End-to-end traceability: egg batch → generation → harvest PO → finished goods batch → sales order → customer delivery. Full recall chain in D365. |
| Capability | Type | Req | Detail |
|---|---|---|---|
| Facility CapEx Projects | CONFIG | REQ-P-001 | New pen installation, facility upgrades tracked as investment projects with WBS. Costs capitalised to Fixed Assets on completion. |
| License Acquisition Projects | CONFIG | REQ-P-002 | License auction costs tracked as intangible asset investment project. Costs capitalised to farm license asset at close. |
| Environmental Upgrade Projects | CONFIG | REQ-P-003 | Upgrade projects to meet green concession requirements tracked separately for subsidy reporting to Fiskeridirektoratet. |
| Grunnrenteskatt CapEx Offset | CONFIG | AQU-022 | Project cost data feeds resource rent tax deduction model. CapEx investments offset against annual tax base calculation. |
| Team Time Tracking | NATIVE | REQ-P-004 | Project timesheets for engineering and biology staff. Resource cost allocation to site CapEx and maintenance projects. |
Minimal custom code — only 2 X++ extensions are deployed, both defensive in nature. This minimises upgrade risk during Microsoft product updates. All other integration is handled by Power Automate, OData, and Virtual Entities.
| Extension | Type | Work Package | Detail |
|---|---|---|---|
| Fish Generation Financial Dimension | X++ EXT | WP-10 | Custom financial dimension "FishGeneration" auto-injected on all InventJournalTrans, ProdJournalBOM, and vendor invoices via X++ extension on LedgerDimensionFacade. Enables per-cohort P&L and cost-per-kg analysis. Also extends InventBatchEntity with FishGeneration field for batch tracking, mapped to nha_generation in Dataverse. |
| Harvest Withdrawal Block | X++ EXT | WP-09 | Extension on ProdUpdRelease.checkDocument(). Queries nha_withdrawal via Dataverse API before allowing Production Order release. If an active withdrawal period exists for the generation being harvested, the extension throws a hard error — preventing illegal harvest of medicated fish. Protects food safety and regulatory compliance. |
Virtual Entities surface D365 data live inside AquaMonitor MDA without copying to Dataverse. This prevents dual-maintenance and ensures the MDA always shows the latest D365 state. Configured in WP-8 (2 weeks).
| Virtual Entity | Type | D365 Source Entity | Used In |
|---|---|---|---|
| Sites & Warehouses | VE READ | InventSiteEntity | AquaMonitor Site/Pen screen — shows D365 site registration, addresses, and operational status. |
| Inventory Batches | VE READ | InventBatchEntity | Site/Pen screen — displays generation batch details, expiry dates, and batch attributes for live fish inventory. |
| Production Orders | VE READ | ProdProductionOrderEntity | Harvest BPF screen — shows harvest production order status, scheduled dates, and output quantities. |
| Transfer Orders | VE READ | InventTransferOrderEntity | Freshwater/Sea operations screen — displays smolt and fish transfer orders between sites/pens. |
| Asset Objects (Pens/Vessels) | VE READ | EntAssetObjectEntity | Asset overview screen — shows pen, vessel, and feed barge asset details with maintenance history. |
| Work Orders (Maintenance) | VE READ | EntAssetWorkOrderEntity | Treatment screen — displays D365 work order status for treatment operations, linking to withdrawal tracker. |
| Quality Orders | VE READ | QualityOrderEntity | Harvest and QC screens — shows quality order results for vet inspections and catch certificates. |
| Purchase Orders (Feed) | VE READ | PurchaseOrderHeaderV2Entity | Feed management screen — displays feed PO status, delivery dates, and quantities for feed planning. |
| Sales Orders | VE READ | SalesOrderHeaderV2Entity | Commercial screen — shows customer orders and allocations for harvest and processing planning. |
AquaMonitor MDA triggers these write-back flows to post financial and inventory transactions into D365 via OData. All flows use service principal authentication and include retry/error handling.
| Flow | Type | Trigger | Detail |
|---|---|---|---|
| Post GL Journal (Mortality Cost) | PA → ODATA | Mortality event recorded in AquaMonitor | Creates and posts a General Journal line in D365 with Fish Generation dimension. Debits mortality expense, credits biomass inventory account. Runs via AQUA-FLOW-003. |
| Release Production Order (Harvest) | PA → ODATA | BPF Stage 6 gate passed in Harvest BPF | Calls ProdProductionOrderEntity OData action to release the harvest production order. Triggers the X++ Withdrawal Block check before release. Runs via AQUA-FLOW-007. |
| Post Inventory Journal (Feed Consumption) | PA → ODATA | Daily feed data from AKVA IoT pipeline | Creates inventory adjustment journal lines in D365 to reduce feed stock on the barge warehouse. Posts with Fish Generation dimension and site/pen references. Runs via AQUA-FLOW-002. |
AKVA iFeed barges push real-time feed consumption telemetry to Azure IoT Hub. Stream Analytics aggregates data into daily totals, which trigger the feed consumption inventory journal posting above. This is the only OT (Operational Technology) → D365 pipeline. Configured in WP-11 (5 weeks).
| Component | Type | Work Package | Detail |
|---|---|---|---|
| AKVA iFeed → IoT Hub | AZURE | WP-11 | Each feed barge pushes feed dispensed (kg), feed type, pen target, and timestamp every 15 minutes via MQTT to Azure IoT Hub (North Europe). |
| Stream Analytics Aggregation | AZURE | WP-11 | Tumbling window (24h) aggregates per-barge, per-pen, per-feed-type totals. Output triggers Power Automate feed journal flow. |
| D365 Inventory Journal Post | PA → ODATA | WP-11 | Aggregated daily feed consumption posted as inventory adjustment reducing barge warehouse stock. Fish Generation dimension auto-applied. |
See how D365 connects with AKVA IoT, regulatory APIs, and feeds the Power BI analytics layer.