236053cd7f
Kategoriserer danske regnskabs-/ERP-skills, ERP-data-afstemnings-
skill og to devops-workflows (gitea-issue-agent, kanban-workflows)
som Radix-medlemmers AI-agenter kan dele.
Struktur:
skills/<kategori>/<skill-navn>/SKILL.md
skills/<kategori>/<skill-navn>/{references,templates,scripts}/
Indekseret af index.json (genereret af scripts/rebuild_index.py).
Kør `python3 scripts/rebuild_index.py --check` i CI for at fange
synkroniseringsfejl.
199 lines
9.6 KiB
Markdown
199 lines
9.6 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".
|
||
version: 0.2.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.
|
||
|
||
## 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"
|
||
|
||
## 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`
|
||
|
||
## 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
|
||
|
||
## 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
|
||
- ❌ **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
|