Skip to content

About

Digdir forsystem: invoicing pre-system for Altinn products (FinMod)

Resources

Code of conduct

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

Forsystem — fakturering av Altinn-produkter (FinMod)

Invoicing pre-system ("forsystem") for Digdir's Altinn products under the new FinMod price model, effective 2027-01-01. The system assembles the invoice basis (fakturagrunnlag) from usage data, prices and customer registries; a human verifies and approves; export files are produced for Unit4 (LG04 via DFØ), plus PDF detail views and CSV/XLSX.

Status: MVP feature-complete (Phases 0–4); Phase 5 demo readiness done. The full monthly cycle runs locally end-to-end — see the demo below and docs/runbook.md. GitOps deployment to Altinn's dis-core cluster is configured in syncroot/ but not yet live: it is blocked on the Entra and PostgreSQL-auth decisions in docs/07 (OQ-16, OQ-17).

Build & run

Requires Java 21 and Docker. The stack runs fully offline; login is stubbed to a dev user with all roles in the local profile.

# Run the full stack (app on :8080 + PostgreSQL 16, Flyway migrates on start).
# On first start the `demo` profile seeds a realistic fake dataset so the whole monthly cycle
# (import → generate → approve → export) is demonstrable offline — see docs/runbook.md.
docker compose up --build
# → http://localhost:8080 , health at http://localhost:8080/actuator/health

# Build and test (Testcontainers spins up PostgreSQL 16 — Docker must be running)
./mvnw verify

On macOS with Colima (not Docker Desktop), Testcontainers needs the daemon socket pointed out explicitly before ./mvnw verify:

export DOCKER_HOST="unix://$HOME/.colima/default/docker.sock"
export TESTCONTAINERS_DOCKER_SOCKET_OVERRIDE="/var/run/docker.sock"

Vendored front-end assets (served locally, no CDN): Digdir Designsystemet CSS + theme (MIT) and htmx (0BSD), under src/main/resources/static/.

Key dates

Date Milestone
2026-08-10 CRM decision meeting (D365 as customer source vs temporary registry)
2026-12 Full dry-run of the pipeline with test data
2027-01-01 New price model in force; measurement/data collection starts
early 2027-02 First production run: invoice January 2027 usage

Documentation

Doc Contents
CLAUDE.md Instructions for the implementing agent — start here
docs/01-context.md Business context, actors, decisions, glossary
docs/02-architecture.md Stack, modules, portability rules
docs/03-datamodel.md Flyway schema and design decisions
docs/04-phases.md Build phases with acceptance criteria
docs/05-testing.md Test strategy, golden-file contract
docs/06-future.md Roadmap beyond MVP and how the MVP prepares for it
docs/07-open-questions.md Open questions, owners, design hedges
docs/08-traceability.md Requirements traceability — every stated requirement mapped to features
docs/09-beslutningslogg.md Decision log — all decisions and correspondence, chronological (Norwegian)
docs/10-presentasjon.md Presentation — status, diagrams, roadmap for stakeholders (Norwegian)
docs/brukerveiledning.md User guide — step-by-step onboarding for end users (Norwegian)
docs/funksjonsoversikt.md Feature inventory — every function with a stable ID, for cross-referencing requirements
docs/runbook.md Ops runbook — monthly procedure, re-run, DFØ errors, local demo
docs/csv-format.md Usage-import CSV contract
syncroot/README.md GitOps deployment to dis-core — Flux, the dis-* operators, what is still missing

Relationship to the old system

The repository ../agresso (kept read-only) is the current production tool operated by FEL for the older services (digital postkasse, e-signering, Altinn monthly, BOD). It keeps running unchanged. This project reuses its most valuable artifact — the LG04 fixed-width writer and its golden-file tests — and replaces everything around it.

About

Digdir forsystem: invoicing pre-system for Altinn products (FinMod)

Resources

Code of conduct

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages