Files
Radix-Skills/skills/accounting/coop-bankimport/SKILL.md
T
dennis 236053cd7f Initial import: 10 Radix skills across 3 categories
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.
2026-06-15 14:41:04 +02:00

199 lines
9.6 KiB
Markdown
Raw 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".
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