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:
@@ -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.
|
||||
Reference in New Issue
Block a user