Skip to content

Add Denmark NemHandel guides, app page, and GOBL examples - #509

Open
methodofaction wants to merge 7 commits into
mainfrom
dk
Open

Add Denmark NemHandel guides, app page, and GOBL examples#509
methodofaction wants to merge 7 commits into
mainfrom
dk

Conversation

@methodofaction

@methodofaction methodofaction commented Jul 29, 2026

Copy link
Copy Markdown
Contributor

What

Documents the new gov-dk app (NemHandel integration via eCourier) end to end:

  • Guide pair/guides/dk-nemhandel-supplier (authorization agreement signing → approval → participant registration, plus unregistration) and /guides/dk-nemhandel (send workflow, import of received documents, OIOUBL example invoices).
  • App page/apps/nemhandel-denmark ("NemHandel Denmark", renamed from /apps/denmark per review), country-umbrella archetype with Description / Actions / Workflows / Documents tabs. Action names match the Console step picker exactly; no pop-count badges since the app's actions show no credit cost yet.
  • Workflow snippetssnippets/workflows/dk/ pairs (send, import, register, unregister) mirroring the Console templates verbatim, incl. one title typo fix (register template's code block said "send invoice").
  • GOBL examplessnippets/parties/dk/ (supplier, business customer, GLN public-institution customer) and snippets/invoices/dk/ (B2G, B2B, credit note) built with the dk-oioubl-v2 addon. Built with a gobl CLI compiled from gobl.dev main + gobl.dk.oioubl (the addon isn't in the released CLI bundle yet).
  • FAQs — new nemhandel regime leaves (compliance / invoicing / supplier / receiving) + guide and app composers; faq/denmark.mdx now renders through a page-faq composer (inline question moved to the country compliance leaf); manage-faqs manifest/registry updated.
  • Wiring — Denmark group in the Guides nav, NemHandel Denmark app in the Apps nav + index card, resources-table rows (app, guides, GOBL regime, gobl.dk.oioubl), compliance-page cross-links, and a gov-dk → DK-flag entry in the workflow diagram's provider icon map (no apps/gov-dk/icon.svg on the CDN yet — swap in when published).

Why

The Denmark integration (gov-dk + gobl.dk.oioubl) is landing and needs its guide family and app catalogue page, following the create-country-guide / create-app-page skills.

Review notes

  • Template slugs on the "Add to my workspace" cards follow the <dir>-<basename> convention: dk-dk-send, dk-dk-register, dk-dk-import, dk-dk-unregister — worth double-checking once the templates are deployed to Console.
  • Verified on a cold mint dev: both guides, the app page's four tabs, FAQ page, and compliance page all render; mint broken-links passes.
  • No screenshots yet for the hosted agreement-signing page — the supplier guide describes the flow in prose; screenshots can be added once the signing UI is final.

🤖 Generated with Claude Code

Documents the new gov-dk app end to end:

- Guide pair: dk-nemhandel-supplier (agreement signing + registration)
  and dk-nemhandel (send, import, OIOUBL examples)
- Denmark app page with actions, workflows, and documents tabs
- Workflow snippet pairs for send/import/register/unregister
- DK party and invoice examples built with the dk-oioubl-v2 addon
- NemHandel FAQ leaves + composers; faq/denmark now uses page-faq
- gov-dk provider icon (DK flag) in the workflow diagram component
- Nav, resources table, and compliance cross-links

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@mintlify

mintlify Bot commented Jul 29, 2026

Copy link
Copy Markdown
Contributor

Preview deployment for your docs. Learn more about Mintlify Previews.

Project Status Preview Updated (UTC)
invopop 🟢 Ready View Preview Jul 29, 2026, 7:47 AM

💡 Tip: Enable Workflows to automatically generate PRs for you.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds end-to-end documentation for Denmark’s NemHandel integration (gov-dk) across guides, an app catalogue page, reusable workflow snippets, FAQs, and Denmark-specific GOBL examples, integrating these into existing navigation and resource tables.

Changes:

  • Added Denmark NemHandel guides (supplier onboarding + invoicing/receiving) and a new Denmark app page.
  • Introduced DK workflow snippet pairs (MDX code + *-data.mdx) and DK GOBL party/invoice examples (min + built).
  • Wired Denmark content into docs.json, country resources, compliance page links, apps index, and workflow provider icon mapping.

Reviewed changes

Copilot reviewed 37 out of 37 changed files in this pull request and generated 3 comments.

Show a summary per file
File Description
snippets/workflows/dk/dk-unregister.mdx New NemHandel unregistration workflow template (MDX code).
snippets/workflows/dk/dk-unregister-data.mdx Data export for rendering the unregistration workflow diagram.
snippets/workflows/dk/dk-send.mdx New NemHandel invoice sending workflow template (MDX code).
snippets/workflows/dk/dk-send-data.mdx Data export for rendering the send workflow diagram.
snippets/workflows/dk/dk-register.mdx New NemHandel supplier registration workflow template (MDX code).
snippets/workflows/dk/dk-register-data.mdx Data export for rendering the registration workflow diagram.
snippets/workflows/dk/dk-import.mdx New NemHandel invoice import workflow template (MDX code).
snippets/workflows/dk/dk-import-data.mdx Data export for rendering the import workflow diagram.
snippets/tables/denmark-resources.mdx Updates Denmark resources table to link NemHandel app/guides + DK regime/addon resources.
snippets/parties/dk/supplier.mdx Adds DK supplier org/party example snippet.
snippets/parties/dk/customer.mdx Adds DK business customer org/party example snippet.
snippets/parties/dk/customer-government.mdx Adds DK public-institution (GLN) customer example snippet.
snippets/invoices/dk/nemhandel-credit-note.min.mdx Minimal DK credit note input example (GOBL).
snippets/invoices/dk/nemhandel-credit-note.mdx Built DK credit note example output.
snippets/invoices/dk/nemhandel-b2g.min.mdx Minimal DK B2G invoice input example (GLN customer).
snippets/invoices/dk/nemhandel-b2g.mdx Built DK B2G invoice example output.
snippets/invoices/dk/nemhandel-b2b.min.mdx Minimal DK B2B invoice input example (CVR customer).
snippets/invoices/dk/nemhandel-b2b.mdx Built DK B2B invoice example output.
snippets/invoices/dk/accordion.mdx Adds an accordion/CodeGroup wrapper to present DK invoice examples in docs.
snippets/faqs/dk/leaves/nemhandel/supplier.mdx Adds NemHandel supplier onboarding FAQ leaf content.
snippets/faqs/dk/leaves/nemhandel/receiving.mdx Adds NemHandel receiving/import FAQ leaf content.
snippets/faqs/dk/leaves/nemhandel/invoicing.mdx Adds NemHandel invoicing/routing/corrections FAQ leaf content.
snippets/faqs/dk/leaves/nemhandel/compliance.mdx Adds NemHandel compliance/format FAQ leaf content.
snippets/faqs/dk/leaves/country/compliance.mdx Adds Denmark country-level compliance FAQ leaf (moved from inline FAQ page).
snippets/faqs/dk/composers/page-faq.mdx New DK FAQ page composer assembling DK + NemHandel + Peppol leaves.
snippets/faqs/dk/composers/guide-nemhandel-supplier.mdx DK supplier-guide FAQ composer.
snippets/faqs/dk/composers/guide-nemhandel-invoicing.mdx DK invoicing/receiving-guide FAQ composer.
snippets/faqs/dk/composers/app-nemhandel.mdx DK app-page FAQ composer.
snippets/components/workflow.jsx Adds gov-dk provider icon mapping for workflow diagram rendering.
skills/manage-faqs/SKILL.md Updates FAQ skill docs for DK nemhandel regime + mapping table.
guides/dk-nemhandel.mdx New Denmark NemHandel invoicing + import guide; embeds workflows, examples, and FAQs.
guides/dk-nemhandel-supplier.mdx New Denmark NemHandel supplier registration/unregistration guide; embeds workflows and FAQs.
faq/denmark.mdx Refactors Denmark FAQ page to render via the new DK page-faq composer.
docs.json Wires Denmark guides into navigation and adds Denmark app under Apps → Government.
compliance/denmark.mdx Adds Denmark app link/card alongside Peppol on the Denmark compliance page.
apps/index.mdx Adds Denmark card to the apps index listing.
apps/denmark.mdx New Denmark app catalogue page with tabs (Description/Actions/Workflows/Documents) and embedded snippets.
Comments suppressed due to low confidence (6)

snippets/invoices/dk/accordion.mdx:50

  • Bullet point ends with “and,” which reads as a dangling conjunction and makes the list ungrammatical.
		- the `preceding` array references the original invoice by `series`, `code`, and `issue_date`, and,

snippets/invoices/dk/accordion.mdx:34

  • Bullet point ends with “and,” which reads as a dangling conjunction and makes the list ungrammatical.
		- only the [VAT rate](https://docs.gobl.org/regimes/dk) (`standard`) is specified on the lines; Denmark's single 25% rate and the amounts are calculated on build, and,

snippets/workflows/dk/dk-unregister.mdx:31

  • Step name capitalization is inconsistent with other workflows ("Set state") and with its own summary ("Set state …").
    snippets/workflows/dk/dk-unregister.mdx:42
  • Step name capitalization is inconsistent with other workflows ("Set state") and with its own summary ("Set state …").
    snippets/workflows/dk/dk-unregister-data.mdx:22
  • Step name capitalization is inconsistent with other workflow data snippets ("Set state") and with its own summary ("Set state …").
    snippets/workflows/dk/dk-unregister-data.mdx:33
  • Step name capitalization is inconsistent with other workflow data snippets ("Set state") and with its own summary ("Set state …").

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread snippets/invoices/dk/accordion.mdx Outdated
- we've added the `dk-oioubl-v2` addon; this validates and normalizes the document using the OIOUBL 2.1 rules, and pulls in the `eu-en16931-v2017` addon automatically,
- the customer carries a GLN legal identity and a `GLN:` endpoint — this is how the document is routed to the institution on the NemHandel network,
- the supplier only sets its CVR number as the tax ID; the addon derives the `DK:CVR` endpoint from it automatically,
- the `debit-transfer` payment key maps to UNTDID payment means `31` (IBAN transfer), one of the codes OIOUBL allows; a BIC is required alongside the IBAN, and,

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Keeping as is — the trailing ", and," is the established convention across the invoice example accordions (38 occurrences, e.g. snippets/invoices/gr/accordion.mdx): the bullets read as one sentence flowing into the final "there are no totals" item.

🤖 Addressed by Claude Code

Comment thread snippets/workflows/dk/dk-unregister.mdx Outdated
Comment thread snippets/workflows/dk/dk-unregister-data.mdx Outdated
Matches the other workflow snippets and the steps' own summaries.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 37 out of 37 changed files in this pull request and generated no new comments.

Comments suppressed due to low confidence (2)

apps/denmark.mdx:88

  • The action card title “Unregister party from Denmark” is inconsistent with the workflow template/action name (“Unregister from NemHandel”). Using the same name across the action list and templates makes it easier to find the correct step in the Console picker.
		<Card title="Unregister party from Denmark" icon="https://assets.invopop.com/flags/dk.svg" horizontal>

apps/denmark.mdx:72

  • Action card titles should match the actual workflow action names used in the templates (and the step picker). In the Denmark send template the actions are named “Generate OIOUBL” and “Send to NemHandel”, but this page currently uses “Convert to OIOUBL” / “Send invoice to NemHandel”, which makes the docs harder to follow and contradicts the PR note about exact action naming.

This issue also appears on line 88 of the same file.

		<Card title="Convert to OIOUBL" icon="https://assets.invopop.com/flags/dk.svg" horizontal>
			Convert a GOBL invoice or credit note to an OIOUBL 2.1 document, attached to the entry under the `oioubl` file key.
		</Card>
		<Card title="Send invoice to NemHandel" icon="https://assets.invopop.com/flags/dk.svg" horizontal>
			Submit the converted OIOUBL document to the network, queueing until eCourier confirms delivery.

The fenced-JSON .mdx is now the single hand-edited file per workflow;
scripts/build-workflow-data.sh regenerates every -data.mdx companion
(--check verifies, a source path argument creates a new one). Running
it also picked up a drifted step name in dk-unregister.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 41 out of 41 changed files in this pull request and generated no new comments.

Comments suppressed due to low confidence (1)

apps/denmark.mdx:88

  • The action card title says "Unregister party from Denmark", but the associated workflow step/action elsewhere in this PR is consistently referred to as "Unregister … from NemHandel" (and the card description also references NemHandel). This inconsistency can confuse readers and makes it harder to match the action name to the workflow step.
		<Card title="Unregister party from Denmark" icon="https://assets.invopop.com/flags/dk.svg" horizontal>

Corrections against current sources (nemhandel.dk, skat.dk, vatupdate):

- Schematron: v1.17.2 hotfix, mandatory since 18 May 2026 (was
  "v1.17 from May 15, 2026", stated as upcoming)
- Single-standard plan is now concrete: NemHandel BIS 4 announced
  Feb 2026, migration 2028 - mid-2029, OIOUBL 2.1 until July 2029
  (replaces the "likely PINT or Danish CIUS, tbd" framing)
- POS/ESR scope per skat.dk: turnover below DKK 10M, four sectors
  incl. restaurants and grocery/24-hour stores (was "DKK 50k-10M")
- Softened the ~2028 domestic e-reporting estimate: not formally
  announced; Denmark's stated focus is ViDA readiness by 2030

Also adds Denmark app cards/links to the timeline updates, the
Bookkeeping Act accordion, the country FAQ leaf, and a NemHandel
mention on the Europe overview.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 43 out of 43 changed files in this pull request and generated no new comments.

Comments suppressed due to low confidence (1)

apps/denmark.mdx:88

  • The action card title says “Unregister party from Denmark”, but the underlying workflow step/provider is “Unregister party from NemHandel” (gov-dk.unregister). Keeping the same wording across the app page and workflow snippets will avoid confusion when users look for the action in the Console step picker.
		<Card title="Unregister party from Denmark" icon="https://assets.invopop.com/flags/dk.svg" horizontal>

@mintlify

mintlify Bot commented Jul 29, 2026

Copy link
Copy Markdown
Contributor

Preview deployment for your docs. Learn more about Mintlify Previews.

Project Status Preview Updated (UTC)
invopop 🟡 Building Jul 29, 2026, 7:45 AM

💡 Tip: Enable Workflows to automatically generate PRs for you.

@CarlosMari CarlosMari left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi just a few points.

  1. Do we want to mention ecourier?

  2. I would maybe call it Nemhandel Denmark or something as Peppol is also available, and for pricing we would prefer people use Peppol probably.

  3. In Example invoice the bullet points look a bit wonky (run on sentences between bullet points).

  4. For the Agreement in Nemhandel supplier registration, we do require the document to be signed, and the testing network is official. I wouldt say the signed with test data, no legal effect as it could become problematic.

  5. Unregistering removes the participant from the NemHandel registry. To onboard the same supplier again later, you’ll need to run the full registration workflow, including a new authorization agreement. Do we want to do this? Currently if it is same silo entry we reuse the agreement.

- Rename the app page to NemHandel Denmark (apps/nemhandel-denmark)
  and add a note steering B2G-only users toward the Peppol app
- Drop eCourier from docs prose; workflow JSON step summaries keep it
  since they mirror the console templates
- Rework the example-invoice bullets into self-contained sentences
- Fix the sandbox agreement wording: signing is required in both
  environments and the test network is official
- Correct the unregister warning: re-registering the same party entry
  reuses the signed authorization agreement

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings July 29, 2026 13:48
@methodofaction

Copy link
Copy Markdown
Contributor Author

Thanks @CarlosMari — all five points addressed in 5e01309:

  1. eCourier — removed from all docs prose (guides, app page, FAQs); delivery is now described as going through "Invopop's NemHandel access point". The workflow JSON step summaries still say eCourier because they mirror the console templates verbatim — if we want it gone there too, the templates in console/templates/workflows/dk should change first and I'll re-sync.
  2. Naming — the app page is now NemHandel Denmark at /apps/nemhandel-denmark (all links, nav, index card, and resources table updated), and the Description tab has a note steering users who just need B2G toward the Peppol app as the usually-simpler option. Note the Console app name should be renamed to match, since the guides tell readers to find "NemHandel Denmark" in the app list.
  3. Example bullets — reworked into self-contained sentences, no more run-ons between bullets.
  4. Agreement wording — "signed with test data, no legal effect" is gone; the table + a note now say signing is required in both environments and the sandbox targets the official NemHandel test network with the same signing/approval flow.
  5. Unregister warning — corrected: re-registering the same party entry reuses the signed authorization agreement, so no new signature is needed.

🤖 Addressed by Claude Code

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 43 out of 43 changed files in this pull request and generated no new comments.

Comments suppressed due to low confidence (2)

apps/nemhandel-denmark.mdx:92

  • The action name here is inconsistent with the workflow/template step name ("Unregister party from NemHandel" in snippets/workflows/dk/dk-unregister(.mdx|-data.mdx)). If these are meant to match the Console step picker and the workflow JSON, the title should use the same wording (NemHandel vs Denmark).
		<Card title="Unregister party from Denmark" icon="https://assets.invopop.com/flags/dk.svg" horizontal>

docs.json:516

  • The PR description says the new app page is at /apps/denmark, but this navigation entry (and the added page file) uses /apps/nemhandel-denmark and there is no /apps/denmark page/redirect in this PR. This mismatch can confuse reviewers and would break any links that follow the PR description.
							"/apps/dian-colombia",
							"/apps/france",
							"/apps/ilyda-greece",
					"/apps/nemhandel-denmark",
							"/apps/poland",

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 43 out of 43 changed files in this pull request and generated no new comments.

Comments suppressed due to low confidence (1)

apps/nemhandel-denmark.mdx:92

  • The action title says "Unregister party from Denmark", but the workflow step and the description refer to NemHandel. This likely won’t match the Console step picker naming and is inconsistent with the other NemHandel action titles on this page.
		<Card title="Unregister party from Denmark" icon="https://assets.invopop.com/flags/dk.svg" horizontal>

Keeps both the Denmark and Finland additions in the guides nav and
the workflow diagram icon map.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants