Phase 1 — Get the data structured before touching Altinn
The correct starting point is a Dataverse schema keyed to the site’s licence number and cage ID, not a Power Automate flow. Over 80% of failed biomass submissions we have seen trace back to inconsistent site identifiers between the feeding system, the counting system and the report, not to the submission mechanism itself. Norway’s biomass reporting obligation covers standing stock, count, average weight, feed consumed, mortality and movements per locality per month — and every one of those fields needs a single authoritative source before automation adds value.
Norway’s national reporting obligations run through Altinn, the state’s shared reporting portal, which routes statutory business reports to the relevant agency. That means the technical target is stable and documented; the fragile part is upstream, inside your own operation.
1. Model the Dataverse tables first. Create three tables: Locality (licence number, site name, MTB in tonnes, production area), Cage (cage ID, generation, stocking date) and BiomassMonthly (period, count, average weight in grams, standing biomass in kg, feed in kg, mortality count and cause). Set the licence number as an alternate key so nothing joins on free text.
2. Ingest the feeding and counting systems via API or scheduled export. Connect Mercatus, Fishtalk or your barge system with an HTTP action or a scheduled CSV pickup into a SharePoint folder. Run it daily, not monthly — daily ingestion turns a month-end reconstruction into a 20-minute review.
3. Digitise paper and PDF farm logs with AI Builder. Train an AI Builder document processing model on your mortality and treatment sheets. In our aquaculture and food-processing work, structured extraction from semi-structured operational documents reaches usable accuracy after roughly 15-20 tagged samples per document layout, with human review on any field below a set confidence threshold.
4. Reconcile daily and flag drift immediately. Build a recurring flow that compares calculated standing biomass (previous stock + growth − mortality − harvest) against the feeding system’s figure. Flag any variance above 2% to a Teams channel the same day.
Phase 2 — Validate, generate and submit
Build the validation layer before the submission step, because an incorrect figure filed on time is worse than a correct one filed late. MTB (maksimalt tillatt biomasse) is a hard licence ceiling in Norway, and biomass reporting is the mechanism through which the regulator observes compliance with it. A flow that submits unvalidated numbers automates a liability.
5. Encode MTB and plausibility rules as a validation flow. Check standing biomass against the locality’s MTB and against the production-area limit; check that average weight moves within a plausible growth band; check that mortality plus harvest plus closing count equals opening count. Any breach stops the flow and raises an approval.
6. Generate the submission file in the exact required format. Use a Power Automate flow with a compose/select action to build the payload from Dataverse, matching Fiskeridirektoratet’s field names, units (kg, grams, whole numbers) and period convention exactly. Store the generated file with a version stamp.
7. Submit through Altinn and capture the receipt. Post the file to the Altinn endpoint via the HTTP action with certificate-based or Maskinporten authentication, then write the returned receipt ID and timestamp back to the BiomassMonthly row. No receipt, no closed month.
8. Handle exceptions as a first-class path, not an afterthought. Route rejections, timeouts and validation failures into a Power Apps review screen where the compliance manager sees the offending field, the source record and a one-click resubmit. Set an escalation at day 5 of the month.
9. Publish the audit trail in Power BI. Build a dashboard showing submission status per locality, days-to-deadline, variance history and receipt IDs. Microsoft documents how to schedule and distribute report exports with Power Automate, which lets the same evidence pack reach the QA lead and the auditor without anyone assembling it manually.
The mechanics carry across jurisdictions. The same architecture underpins weekly sea-lice counts routed to Mattilsynet and the much tighter 24-hour mortality event window that DFO enforces in Canada — only the schema, the deadline and the endpoint change.
“Nobody fails a biomass report because Altinn was hard. They fail because three systems disagree about what a cage weighed on the 30th. Fix the disagreement in Dataverse and the submission becomes a scheduled job.” — Marco Chávez, Founder of Muze AI Consulting.
What this typically delivers
Automating the monthly biomass cycle usually removes 20-30 of the 25-40 monthly hours a mid-sized licence group spends on it, and closes the month within 48 hours instead of five to seven days. Those figures come from Muze’s own delivery record across regulatory automation projects: 60% reduction in compliance-report preparation time, 80% fewer manual data-entry errors, 3,000+ annual hours saved in manual tasks, and 15-40% savings in direct operating costs.
Chile is the world’s second-largest salmon producer, and the same global groups farm in both hemispheres. Muze AI Consulting automated SERNAPESCA regulatory reporting for one of the world’s five largest salmon farming companies — a monthly cycle with the same failure modes as the Fiskeridirektoratet one, under a different logo. Chilean producers have been deploying computer vision and digital platforms for sanitary control and traceability (SeafoodSource, 2024), which means the reference architecture is field-tested at scale.
The data shows that biomass-reporting effort scales with the number of source systems, not the number of sites. In Muze’s experience, a group with four upstream systems and 6 sites spends more month-end effort than a group with one system and 20 sites — which is why the integration layer, not the submission step, is where the return sits. A comparable pattern shows up in regulated food traceability work under FSVO rules, where document ingestion dominates the effort.
| Component | Role in the biomass flow | Typical build effort |
|---|---|---|
| Dataverse | Single source for locality, cage and monthly biomass records | 2-3 weeks |
| Power Automate | Daily ingestion, validation, file generation, Altinn submission | 3-4 weeks |
| AI Builder | Extraction from paper/PDF mortality and treatment logs | 1-2 weeks |
| Power Apps | Exception review and manual override screen | 1-2 weeks |
| Power BI | Submission status, variance and audit dashboard | 1 week |
Did you do this?
| Step | Done | Note |
|---|---|---|
| 1. Dataverse schema with licence number as alternate key | ☐ | Blocks every downstream join if skipped |
| 2. Daily ingestion from feeding/counting systems | ☐ | Daily, not monthly — this is the single biggest time saver |
| 3. AI Builder model trained on paper farm logs | ☐ | ~15-20 tagged samples per layout; set a confidence threshold |
| 4. Daily reconciliation with 2% variance alert | ☐ | Route to Teams, same day |
| 5. MTB and plausibility validation rules encoded | ☐ | Must exist before step 7 goes live |
| 6. Submission file generated in the exact required format | ☐ | Field names, units and period convention verified against spec |
| 7. Altinn submission with receipt ID written back | ☐ | No receipt stored = month not closed |
| 8. Exception path in Power Apps with day-5 escalation | ☐ | Rejections must not sit in an inbox |
| 9. Power BI audit dashboard live | ☐ | Status per locality, days-to-deadline, receipt history |
Where to start
Start with one locality and one month. Map every field the Fiskeridirektoratet report requires to its actual source system, note which ones exist only on paper, and build the Dataverse schema against that map — before writing a single flow. If the mapping exercise produces more than a handful of “we work that out manually”, the integration layer is where your budget belongs.
Muze AI Consulting (muze.cl) works with salmon farming, seafood and food-manufacturing operations across Chile, Norway and Switzerland, including BlueYou in Zurich and Meliomar in the Philippines. If you want a concrete assessment of which parts of your biomass-reporting cycle can be automated and what the timeline looks like, request the free AI diagnostic at muze.cl/en/diagnostico.