Files
2026-06-16 15:44:37 +02:00

274 lines
15 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
name: coop-bankimport
description: >
Reconcilier Coop Danmark-bankbetalinger mod Uniconta- eller e-conomic-fakturaer (og kreditnotaer,
bonus, modregninger) — aktiveres ved "Coop afstemning", "Coop bankbetaling", "Coop opgørelse",
"forenel Coop betaling med faktura", "Coop kreditnota", "Coop årsafstemning", "åben post
pr. balancedato", "Coop revisorafstemning" eller "Coop årsregnskab".
version: 0.3.0
author: radix-accountant
license: MIT
metadata:
hermes:
tags: [accounting, dansk-regnskab, coop-danmark, uniconta, e-conomic, reconciliation, bankafstemning]
related: [dansk-csv-import, kontoplan-mapping, resultatopgoerelse, e-conomic-integration]
---
# Coop Danmark-bankimport & afstemning (Uniconta eller e-conomic)
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?
| System | Fordel ved Coop-afstemning | Ulempe |
|---|---|---|
| **Uniconta** | Lokal data, ingen API-rate-limit, kender hele kontohistorik | Manuel CSV-eksport nødvendig |
| **e-conomic** | Cloud-baseret, kan bogføre direkte via API, kunde 1 (Coop) findes typisk allerede | Rate-limit, kræver AppSecretToken |
**Spørg brugeren** hvilket system de bruger — svaret bestemmer hvordan data hentes og hvordan bogføringsforslaget præsenteres.
## Aktiveres ved
- "Forenel denne Coop-bankbetaling med Uniconta"
- "Importer Coop-opgørelse for uge 22"
- "Hvorfor matcher Coop-bankbetalingen ikke Uniconta-saldoen?"
- "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
Brugeren leverer typisk:
1. **Coop bankbetalings-CSV** (Sydbank, Jyske Bank eller Danske Bank — særskilt format for Coop)
2. **Coop-specifikation** (PDF eller Excel) — viser linjer for hver faktura
3. **Bogføringssystem-data** (ét af):
- **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`
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)
```
Bogføringsdato;Posteringstekst;Beløb;Saldo
15-06-2026;"Coop Danmark A/S Bankbetaling 12345678";-23.456,78;100.000,00
```
- **Negativ beløb** = du har modtaget penge fra Coop (kredit på din konto)
- **Reference** = Coops bankaftale-id (8 cifre typisk)
- **Dato** = afregningsdato
## Coops specifikation (Excel/PDF, eksempel)
| Fakturanr | Fakturadato | Beløb | Moms | Total | Type |
|---|---|---|---|---|---|
| 2026-1234 | 01-06-2026 | 1.000,00 | 250,00 | 1.250,00 | Faktura |
| 2026-1235 | 02-06-2026 | 2.500,00 | 625,00 | 3.125,00 | Faktura |
| KN-2026-100 | 03-06-2026 | -500,00 | -125,00 | -625,00 | Kreditnota |
| Bonus-2026-06 | 30-06-2026 | -1.000,00 | 0,00 | -1.000,00 | Bonus |
| Modregning-2026-06 | 30-06-2026 | -250,00 | 0,00 | -250,00 | Modregning |
| **Total** | | **1.750,00** | **750,00** | **2.500,00** | |
Bankbetalingen på 2.500,00 kr. dækker altså: 2 fakturaer 1 kreditnota bonus modregning.
## Workflow
### Fase 1: Importér bankbetaling
1. **Modtag Coop-CSV** (typisk Sydbank-format)
2. **Filtrér Coop-poster** (tekst matcher `Coop Danmark`)
3. **Vis hver bankbetaling** med reference, dato, beløb
### Fase 2: Importér opgørelse (specifikation)
1. **Modtag specifikationsfil** (PDF eller Excel)
2. **Parse linjer**: fakturaer, kreditnotaer, bonus, modregninger
3. **Beregn totaler** og verificer at de matcher bankbetalingen
4. **Hvis differens**: marker som "afventer manuel kontrol"
### Fase 3: Match mod bogføringssystem
**Variant A: Uniconta**
1. **Hent Uniconta-fakturaer** (via API eller eksport) for samme periode
2. **For hver faktura i opgørelsen**: søg i Uniconta efter match på:
- **Primær match**: fakturanr + beløb (høj confidence)
- **Sekundær match**: beløb + dato ±7 dage (medium confidence)
- **Ingen match**: marker som "mangler i Uniconta"
**Variant B: e-conomic**
1. **Hent bogførte fakturaer** via API:
```
GET /invoices/booked?filter=balance$gt:0&filter=customer.name$like:Coop
```
2. **Filtrér på kunde** (Coop Danmark A/S) — de fleste Coops kunder findes som kunde 1, men tjek
3. **For hver faktura i opgørelsen**: søg i e-conomic-respons efter match på:
- **Primær match**: `bookedInvoiceNumber` + `grossAmount` (høj confidence)
- **Sekundær match**: `grossAmount` + `date` ±7 dage (medium confidence)
- **Ingen match**: marker som "mangler i e-conomic"
**Vis match-status** for hver linje (uanset variant):
- ✅ Matchet (faktura fundet)
- ⚠️ Forskelligt beløb (faktura fundet, men beløb afviger)
- ❌ Manglende (faktura ikke fundet)
### Fase 4: Generer bogføringsforslag
For hver matchet bankbetaling:
```
BOGFØRINGSFORSLAG — Coop bankbetaling [reference]
═══════════════════════════════════════════════════
Dato: [dd-MM-yyyy]
Bankbeløb: 2.500,00 kr. (positivt = indbetaling)
───────────────────────────────────────────────────
DEBET (kontonr / navn) BELØB
───────────────────────────────────────────────────
[56200] Bank, Sydbank 2.500,00
KREDIT (kontonr / navn) BELØB
───────────────────────────────────────────────────
[10120] Tilgodehavender, salg 1.250,00 (faktura 2026-1234)
[10120] Tilgodehavender, salg 3.125,00 (faktura 2026-1235)
[10120] Tilgodehavender, salg 625,00 (kreditnota KN-2026-100)
[52100] Bonus og rabatter 1.000,00 (bonus)
[58000] Modregning 250,00 (modregning)
Total debet: 2.500,00
Total kredit: 2.500,00
═══════════════════════════════════════════════════
Diff: 0,00 ✅ Balanceret
═══════════════════════════════════════════════════
```
### Fase 5: Bruger-godkendelse
⚠️ **Vis altid bogføringsforslaget og vent på eksplicit godkendelse** før der postes til Radix/Uniconta/e-conomic.
**Hvis brugeren vil bogføre direkte i e-conomic** (se `e-conomic-integration` skill):
1. Vis bogføringsforslaget med konkrete kontonumre
2. Generer `entries` JSON-objekt klar til `/journals/:id/vouchers/:n/entries` POST
3. Generer et UUID v4 Idempotency-Key
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
## Å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
- ❌ **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
- ❌ **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
- ❌ **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 vis match-status per linje (matchet / afvigende / manglende)
- ✅ ALTID vent på brugerens "ja, bogfør" før API-kald
## Kontering (typisk dansk kontoplan)
| Kontotype | Kontonr (SUM/DG) | Bruges til |
|---|---|---|
| Bank | 56200 | Bank, Sydbank/Jyske/Danske (pengebevægelsen) |
| Tilgodehavender | 10120 | Åbne fakturaer der betales af Coop |
| Bonus/rabatter | 52100 | Coops bonus, årsbonus, kampagnerabat |
| Modregning | 58000 | Emballage-pant, reklamation, Cops egne fradrag |
| Kreditnotaer | 10120 (negativ) | Coops kreditnotaer (vareretur mv.) |
Tallene er eksempler — bekræft altid med virksomhedens egen kontoplan.
## Eksempel-aktivering
**Bruger:** "Jeg har lige fået en Coop-betaling på 12.345,67 kr. d. 15-06-2026. Her er opgørelsen — kan du finde ud af hvad der dækker hvad?"
**Svar (forkortet):**
> ✅ Bankbetaling genkendt: 12.345,67 kr. d. 15-06-2026
>
| Opgørelseslinje | Beløb | Uniconta-match | Status |
> |---|---|---|---|
> | Faktura 2026-1234 | 1.250,00 | UN-5678 | ✅ Matchet |
> | Faktura 2026-1235 | 3.125,00 | UN-5679 | ✅ Matchet |
> | Faktura 2026-1240 | 5.000,00 | UN-5680 | ✅ Matchet |
> | Kreditnota KN-2026-100 | -625,00 | UN-5681 | ✅ Matchet |
> | Bonus Q2 2026 | -1.404,33 | (bogføres direkte) | ⚠️ Ingen reference |
> | **Total** | **7.345,67** | | |
> | **Diff vs bank** | **5.000,00** | | ⚠️ Mangler 5.000,00 kr. |
>
> **Bogføringsforslag:**
> ```
> DEBET 56200 Bank 12.345,67
> KREDIT 10120 Tilgodehavender 1.250,00
> KREDIT 10120 Tilgodehavender 3.125,00
> KREDIT 10120 Tilgodehavender 5.000,00
> KREDIT 10120 Tilgodehavender -625,00
> KREDIT 52100 Bonus -1.404,33
> ```
>
> ⚠️ **Bemærk:** Diff på 5.000,00 kr. — enten mangler en faktura i opgørelsen, eller opgørelsen er ufuldstændig. Vil du:
> 1. Indberette bogføringsforslag som det er (med diff markeret)
> 2. Springe bankbetalingen over indtil videre
> 3. Kontakte Coop for komplet specifikation