274 lines
15 KiB
Markdown
274 lines
15 KiB
Markdown
---
|
||
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
|