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.
This commit is contained in:
2026-06-15 14:41:04 +02:00
commit 236053cd7f
30 changed files with 4460 additions and 0 deletions
+178
View File
@@ -0,0 +1,178 @@
---
name: dansk-csv-import
description: >
Importér danske bank-CSV-eksporter (Nordea, Danske Bank, Jyske Bank, Sydbank) og
e-conomic-bankimport-format — aktiveres ved "importér CSV", "bankudtog", "kontoudtog",
"Nordea eksport", "Danske Bank CSV", "Jyske Bank eksport", "e-conomic bankimport".
version: 0.2.0
author: radix-accountant
license: MIT
metadata:
hermes:
tags: [accounting, dansk-regnskab, csv-import, bank, nordea, danske-bank, jyske-bank, e-conomic]
related: [kontoplan-mapping, coop-bankimport, momsafregning, e-conomic-integration]
---
# Dansk CSV-import (bankudtog)
Håndterer import af **danske bank-CSV-eksporter** til Radix ERP med korrekt detektering af:
- Bank (Nordea, Danske Bank, Jyske Bank, Sydbank, Nykredit, Arbejdernes Landsbank)
- Datoformat (dansk `dd-MM-yyyy` eller ISO `yyyy-MM-dd`)
- Decimalformatering (komma som decimal — dansk standard)
- Feltsemikolon (dansk CSV-standard, ikke komma)
- Tegnsæt (Latin1, UTF-8 med/uden BOM)
## Aktiveres ved
- "Importér denne Nordea-CSV til Radix"
- "Jyske Bank har sendt kontoudtog — hjælp med at indlæse det"
- "Parse denne bankeksport"
- "Vis alle transaktioner fra marts 2026 i denne CSV"
## Genkendte bankformater
### Nordea (Erhverv)
```
Bogføringsdato;Tekst;Beløb;Saldo;Valuta;Reference
01-06-2026;"Nets *12345";-123,45;12.345,67;DKK;
```
- Separator: `;`
- Encoding: Latin1
- Beløb: dansk format (`-123,45`)
- Dato: `dd-MM-yyyy`
### Danske Bank
```
Dato;Tekst;Beløb;Saldo
01-06-2026;"MobilePay - Anders Hansen";-250,00;5.000,00
```
- Separator: `;`
- Encoding: UTF-8 med BOM
- Beløb: dansk format
- Dato: `dd-MM-yyyy`
### Jyske Bank
```
Dato;Beskrivelse;Beløb;Saldo
01-06-2026;"POS DSB 1234 København";-89,00;3.456,78
```
- Separator: `;`
- Encoding: Latin1
- Dato: `dd-MM-yyyy`
- Negative beløb: kan være `-89,00` eller `(89,00)` — begge understøttes
### Sydbank
```
Bogføringsdato;Posteringstekst;Beløb;Saldo
01-06-2026;"Coop Danmark A/S Bankbetaling";-12.345,67;45.678,90
```
- Separator: `;`
- Encoding: Latin1
- Dato: `dd-MM-yyyy`
### e-onomic bankimport-format
```
Dato;Tekst;Beløb;Saldo;Modkonto;Valuta;Bankkonto
01-06-2026;"Nets *12345";-123,45;12.345,67;5820;DKK;5508 8765432
```
- Separator: `;`
- Encoding: UTF-8 med BOM
- **Modkonto** (e-conomics kontonr, fx 5820 for bank) — bruges direkte ved bogføring
- **Bankkonto** i dansk 14-cifret format (reg.nr. + kontonr) — verificer mod kundens egen bankaftale
- Dato: `dd-MM-yyyy` (men konverter til ISO `yyyy-MM-dd` før API-kald til e-conomic)
## Workflow
1. **Modtag CSV-fil** (enten via sti eller indhold direkte i chat)
2. **Detektér bank-format** ud fra header (kolonnenavne) — spørg brugeren hvis usikker
3. **Detektér encoding** (tjek for BOM, prøv Latin1, UTF-8)
4. **Parse CSV** med korrekt separator (`;` for dansk)
5. **Normaliser data**:
- Datoer → `dd-MM-yyyy` (ensret formattering)
- Beløb → Python float (erstat `,` med `.`, fjern tusindtalsseparator)
- Negativ beløb → negativ tal (fjern evt. parentesnotation)
- Tekst → trim, fjern dobbelte mellemrum
6. **Vis preview** med de første 5-10 transaktioner (bed brugeren bekræfte format)
7. **Vis statistik**:
- Antal transaktioner
- Periode (første/sidste dato)
- Total ind, total ud, slutbalance
- Kontroller at slutbalance matcher det brugeren forventede
8. **Identificér dubletter** (samme dato + beløb + tekst)
9. **Kortlæg konti** (se kontoplan-mapping skill) — eller lad brugeren vælge
10. **Generer klar-til-import JSON** til Radix ERP API
## Eksempel-aktivering
**Bruger:** *indsætter en filsti eller indhold:*
```
Bogføringsdato;Tekst;Beløb;Saldo;Valuta
01-06-2026;"Nets *12345 MobilePay";-123,45;12.345,67;DKK
02-06-2026;"Coop Danmark";-5.678,90;6.666,77;DKK
...
```
**Svar:**
> ✅ Genkendt format: **Nordea Erhverv** (Latin1, semikolon-separeret)
>
> | Dato | Tekst | Beløb | Saldo |
> |---|---|---|---|
> | 01-06-2026 | Nets *12345 MobilePay | 123,45 | 12.345,67 |
> | 02-06-2026 | Coop Danmark | 5.678,90 | 6.666,77 |
> | ... |
>
> **Statistik:**
> - Periode: 01-06-2026 til 30-06-2026
> - Transaktioner: 47
> - Total ind: 8.901,23 kr.
> - Total ud: 23.456,78 kr.
> - Slutbalance: 6.666,77 kr.
>
> ⚠️ **1 mulig dublet** fundet (samme dato, beløb og tekst på række 12 og 23). Skal jeg springe dubletten over ved import?
## Almindelige CSV-fælder
- ❌ Latin1-filer åbnet som UTF-8 → `æ` i stedet for `æ`
- ❌ Datoer med `.` (amerikansk) i stedet for `-` (dansk)
- ❌ Beløb med `.` som tusindtalsseparator ignoreret
- ❌ Negative beløb som `(123,45)` (parentes) ikke håndteret
- ❌ Header-række fejlfortolket som data
- ❌ Linjeskift i `Tekst`-felt (fx "Coop\nDanmark") brækker parser
- ✅ ALTID detektér encoding først (BOM, Latin1, UTF-8)
- ✅ ALTID vis preview før import
- ✅ ALTID vis statistik og balancesum til kontrol
## Radix ERP API-endpoint (for import)
## Bogføringssystem-integration (efter import)
Efter import kan transaktioner bogføres direkte i e-conomic (se `e-conomic-integration` skill):
```
POST /journals/{journalId}/vouchers/{voucherNumber}/entries
Headers:
X-AppSecretToken: ${ECONOMIC_APP_SECRET_TOKEN}
X-AgreementGrantToken: ${ECONOMIC_AGREEMENT_GRANT_TOKEN}
Idempotency-Key: <UUID v4>
```
Eksempel-payload genereret fra importeret CSV:
```json
{
"accountingYear": {"year": 2026},
"entries": [
{
"date": "2026-06-01",
"text": "Nets *12345 MobilePay",
"amount": -123.45,
"amountInBaseCurrency": -123.45,
"currency": "DKK",
"account": {"accountNumber": 1690},
"contraAccount": {"accountNumber": 5820},
"vatAccount": {"vatCode": "I25"}
}
]
}
```
⚠️ **Bekræft ALTID med brugeren før bulk-import** — vis diff (antal transaktioner, totaler) og kræv eksplicit "ja, importer" før API-kald.