Add Coop year-end reconciliation workflow

This commit is contained in:
Dennis Juhler Aagaard
2026-06-16 15:44:37 +02:00
parent 236053cd7f
commit 9b1bf4230f
+77 -2
View File
@@ -3,8 +3,9 @@ name: coop-bankimport
description: > description: >
Reconcilier Coop Danmark-bankbetalinger mod Uniconta- eller e-conomic-fakturaer (og kreditnotaer, Reconcilier Coop Danmark-bankbetalinger mod Uniconta- eller e-conomic-fakturaer (og kreditnotaer,
bonus, modregninger) — aktiveres ved "Coop afstemning", "Coop bankbetaling", "Coop opgørelse", bonus, modregninger) — aktiveres ved "Coop afstemning", "Coop bankbetaling", "Coop opgørelse",
"forenel Coop betaling med faktura", "Coop kreditnota". "forenel Coop betaling med faktura", "Coop kreditnota", "Coop årsafstemning", "åben post
version: 0.2.0 pr. balancedato", "Coop revisorafstemning" eller "Coop årsregnskab".
version: 0.3.0
author: radix-accountant author: radix-accountant
license: MIT license: MIT
metadata: metadata:
@@ -17,6 +18,8 @@ metadata:
Specifikt workflow til **Coop Danmark ↔ [Uniconta|e-conomic]-afstemning**. Hver bankbetaling fra Coop følges af en specifikation (opgørelse) der viser præcis hvilke fakturaer, kreditnotaer, bonusser og modregninger beløbet dækker. Målet er at matche **bankbetalinger (Coop) → opgørelseslinjer → bogføringssystem-bilag** og producere bogføringsklare posteringer. Specifikt workflow til **Coop Danmark ↔ [Uniconta|e-conomic]-afstemning**. Hver bankbetaling fra Coop følges af en specifikation (opgørelse) der viser præcis hvilke fakturaer, kreditnotaer, bonusser og modregninger beløbet dækker. Målet er at matche **bankbetalinger (Coop) → opgørelseslinjer → bogføringssystem-bilag** og producere bogføringsklare posteringer.
Skillen dækker også **årsafslutnings-/åben-post-afstemning** til revisor, hvor alle TranbergDahl/Uniconta-debitorer behandles som én samlet Coop-modpart, selv om Uniconta-eksporten er grupperet pr. butik/debitor.
## Hvilket bogføringssystem? ## Hvilket bogføringssystem?
| System | Fordel ved Coop-afstemning | Ulempe | | System | Fordel ved Coop-afstemning | Ulempe |
@@ -32,6 +35,8 @@ Specifikt workflow til **Coop Danmark ↔ [Uniconta|e-conomic]-afstemning**. Hve
- "Importer Coop-opgørelse for uge 22" - "Importer Coop-opgørelse for uge 22"
- "Hvorfor matcher Coop-bankbetalingen ikke Uniconta-saldoen?" - "Hvorfor matcher Coop-bankbetalingen ikke Uniconta-saldoen?"
- "Generer bogføringsforslag for denne Coop-indbetaling" - "Generer bogføringsforslag for denne Coop-indbetaling"
- "Afstem åbne Coop-poster pr. 31-12 til revisor"
- "Sammenlign TranbergDahls Uniconta-debitorer med Coop kreditor-kontoudtog"
## Forventede input ## Forventede input
@@ -42,6 +47,12 @@ Brugeren leverer typisk:
- **Uniconta-eksport** (fakturaer, kreditnotaer, åbne poster) — typisk Excel - **Uniconta-eksport** (fakturaer, kreditnotaer, åbne poster) — typisk Excel
- **e-conomic API-kald** (se `e-conomic-integration` skill): `/invoices/booked?filter=balance$gt:0&filter=customer.name$like:Coop` - **e-conomic API-kald** (se `e-conomic-integration` skill): `/invoices/booked?filter=balance$gt:0&filter=customer.name$like:Coop`
Ved **årsafslutnings-/revisorafstemning** er input typisk:
1. **Uniconta debitor-kontoudtog alle** — grupperet pr. TranbergDahl/Coop-butik med debitorsaldo på gruppelinjen og faktura-/kreditnota-detailposter under.
2. **Coop kreditor-kontoudtog** — flad SAP-lignende eksport med `Reference`, `Posting Date`, `Clearing Date`, `Amount in Doc. Curr.`, `Document Type`, `Document Number` og evt. `Assignment`.
3. **Kontrolsaldo fra Uniconta/finans** pr. balancedato, fx saldo på samlet Coop-tilgodehavende.
4. Eventuel kendt liste/antal over fakturaer som mangler i Coop-opgørelsen.
## Coops bankbetalingsformat (typisk) ## Coops bankbetalingsformat (typisk)
``` ```
@@ -142,11 +153,75 @@ Diff: 0,00 ✅ Balanceret
4. Vent på "ja, bogfør" — udfør derefter API-kald 4. Vent på "ja, bogfør" — udfør derefter API-kald
5. Verificer at svaret er 201 Created og at `entries` indeholder bogførings-ID 5. Verificer at svaret er 201 Created og at `entries` indeholder bogførings-ID
## Årsafslutningsflow: åben post pr. balancedato
Brug dette flow når målet er dokumentation til revisor eller årsregnskab, ikke bogføring af en enkelt bankbetaling.
### Afklar før analyse
1. Bekræft balancedato, typisk `31-12-yyyy`.
2. Bekræft at alle TranbergDahl/Uniconta-debitorer skal behandles som **én samlet Coop-modpart**.
3. Bekræft hvilket felt i Coop-eksporten er fakturanummer. Standard: `Reference`; brug kun `Assignment` som sekundær hjælpekolonne hvis brugeren bekræfter det.
4. Bekræft matchregel. Standard til revisor: fakturanr. + beløb med modsat fortegn og tolerance `0,01 kr.`
5. Bekræft kontrolsaldo fra Uniconta/finans og om kendte manglende fakturaer i Coop-opgørelsen skal vises separat.
### Datamodellering
**Uniconta/TranbergDahl-debitorfil**
- Læs gruppelinjer som debitor-masterdata: debitor nr., navn, by og debitorsaldo.
- Læs detailposter som faktura-/kreditnota-linjer: dato, fakturanr., bilag, tekst, beløb, resterende, forfalden og type.
- Brug **sum af debitorsaldi fra gruppelinjerne** som primær saldo mod Uniconta/finans. Brug ikke blindt sum af detailkolonnen `Resterende`, da den kan være ufuldstændig eller blank på udlignede/regulerede linjer.
**Coop kreditor-kontoudtog**
- Brug `Reference` som fakturanr., når det er bekræftet.
- Åben post pr. balancedato defineres som:
- `Posting Date <= balancedato`, og
- `Clearing Date` er blank eller `Clearing Date > balancedato`.
- Forvent modsat fortegn mellem TranbergDahl-debitorbeløb og Coop-kreditorbeløb.
- Medtag kreditnotaer på samme måde som fakturaer; forskellen ligger i fortegnet, ikke i afstemningsmetoden.
### Matchhierarki
1. **Høj confidence**: fakturanr. + beløb med modsat fortegn, tolerance `0,01 kr.`
2. **Mellem confidence**: fakturanr. findes, men beløbet afviger. Marker som `Beløbsdifference`.
3. **Lav confidence / manuel kontrol**: samme beløb, men manglende fakturanr. Brug kun som analysehint, ikke som revisor-konklusion.
4. **Mangler i Coop**: fakturanr. findes i Uniconta/TranbergDahl, men ikke i Coop-eksportens fakturanummerfelt.
5. **Kun i Coop**: fakturanr. findes i Coop-eksporten, men ikke i Uniconta/TranbergDahl-eksporten.
### Revisor-egnet output
Lav altid en arbejdsbog eller rapport med disse faner/sektioner:
| Sektion | Indhold |
|---|---|
| `Forside / Konklusion` | Formål, balancedato, kilder, kontrolsaldo, samlet konklusion, væsentlige forbehold |
| `Metode` | Matchregel, cutoff-regel, fortegnskonvention, tolerance og felter brugt |
| `Saldoafstemning` | Uniconta/finans-saldo, sum af debitorsaldi, Coop åbne poster, kendte mangler/reguleringer og uforklaret difference |
| `Debitorsaldi` | Alle TranbergDahl/Uniconta-butikker som underposter til én samlet Coop-modpart |
| `Matchede poster` | Fakturanr. + beløb matcher med høj confidence |
| `Beløbsdifferencer` | Fakturanr. findes begge steder, men beløb matcher ikke |
| `Mangler i Coop` | Fakturaer/kreditnotaer i Uniconta/TranbergDahl som ikke findes i Coop-kontoudtog |
| `Kun i Coop` | Coop-reference som ikke findes i Uniconta/TranbergDahl |
| `Kendte mangler` | Brugeroplyste kendte mangler, fx antal eller liste over fakturaer der mangler i Coop |
| `Checks` | Maskinelle checks: saldo binder, antal binder, ingen dubletter uden forklaring, dato-cutoff anvendt |
### Kvalitetskrav
- Vis beløb med dansk formatering og `kr.`
- Brug både antal og beløb i alle opsummeringer.
- Bevar debitor nr. og debitor navn på alle Uniconta-linjer, selv om rapportens konklusion er én samlet Coop-modpart.
- Marker kendte Coop-reguleringer som forklaringstype, ikke som automatisk match.
- Skriv tydeligt hvis saldoafstemningen bygger på en ekstern kontrolsaldo, og vis difference mod kildesaldoerne.
- Slut med en revisor-egnet konklusion: `Afstemt`, `Afstemt med kendte differencer`, eller `Ikke fuldt afstemt - kræver dokumentation`.
## Almindelige problemer ## Almindelige problemer
- ❌ **Bankbeløb matcher ikke opgørelse-total**: typisk fordi opgørelsen kun viser netto (efter Coops egne fradrag som emballage-pant, kampagnerabat, mv.) - ❌ **Bankbeløb matcher ikke opgørelse-total**: typisk fordi opgørelsen kun viser netto (efter Coops egne fradrag som emballage-pant, kampagnerabat, mv.)
- ❌ **Faktura findes ikke i Uniconta**: kan skyldes at fakturaen er bogført i forkert regnskabsår, eller at Uniconta-eksporten er ufuldstændig - ❌ **Faktura findes ikke i Uniconta**: kan skyldes at fakturaen er bogført i forkert regnskabsår, eller at Uniconta-eksporten er ufuldstændig
- ❌ **Kreditnota findes, men med forkert fortegn**: dobbelt-negativ bliver positivt — håndtér dette eksplicit - ❌ **Kreditnota findes, men med forkert fortegn**: dobbelt-negativ bliver positivt — håndtér dette eksplicit
- ❌ **Sum af detailposter matcher ikke Uniconta-saldo**: ved debitor-kontoudtog kan gruppelinjens debitorsaldo være den saldo, der binder til finans, mens detailkolonnen kun viser restbeløb på udvalgte linjer.
- ❌ **Coop viser kun hovedkontoret, mens Uniconta viser butikker**: behandl butikkerne som underposter til én samlet Coop-modpart og rapportér både samlet saldo og debitorfordeling.
- ❌ **Faktura findes i Coop, men ikke åben pr. balancedato**: forklares ofte af `Clearing Date`; klassificér den efter cutoff, ikke bare efter om fakturanr. findes i hele filen.
- ❌ **Coop-bonus mangler konto**: virksomheder der ikke har en dedikeret bonuskonto bruger typisk 52100 (Bonus/rabatter) — bekræft med brugeren - ❌ **Coop-bonus mangler konto**: virksomheder der ikke har en dedikeret bonuskonto bruger typisk 52100 (Bonus/rabatter) — bekræft med brugeren
- ❌ **Modregning uden specifikation**: spørg brugeren — kan være emballage-pant, reklamation, eller andet - ❌ **Modregning uden specifikation**: spørg brugeren — kan være emballage-pant, reklamation, eller andet
- ✅ ALTID verificer at bankbeløb = sum(opgørelseslinjer) ±0,01 kr. (afrundingstolerance) - ✅ ALTID verificer at bankbeløb = sum(opgørelseslinjer) ±0,01 kr. (afrundingstolerance)