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
+198
View File
@@ -0,0 +1,198 @@
---
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
+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.
@@ -0,0 +1,290 @@
---
name: e-conomic-integration
description: >
Integration med e-conomic cloud-bogføring — aktiveres ved "bogfør i e-conomic", "hent fakturaer
fra e-conomic", "kassekladde", "sync mod e-conomic", "opret kunde i e-conomic", "kontoudtog
e-conomic", "REST API", "AppSecretToken". Dækker auth, kontoplan, kassekladder, bogførte
fakturaer, kreditorer, kunder og banktransaktioner.
version: 0.1.0
author: radix-accountant
license: MIT
metadata:
hermes:
tags: [accounting, e-conomic, dansk-regnskab, api, cloud-bogfoering, integration]
related: [resultatopgoerelse, momsafregning, kontoplan-mapping, coop-bankimport, dansk-csv-import]
---
# e-conomic-integration
Integration med **e-conomic** cloud-bogføringssystem via den officielle REST API. Bruges til at hente fakturaer, kunder, kreditorer, bogføre bilag, synce banktransaktioner og afstemme konti — alt på dansk.
## Aktiveres ved
- "Bogfør denne faktura i e-conomic"
- "Hent åbne fakturaer fra e-conomic"
- "Synk banktransaktioner til e-conomic"
- "Opret kunde X i e-conomic"
- "Hvad er saldi på konto 1010 i e-conomic?"
- "Generer kassekladdeline for denne betaling"
- "Vis alle kreditorer med udestående i e-conomic"
## API basics
### Base-URL
```
https://restapi.e-conomic.com
```
### Auth (kræver to tokens)
| Header | Værdi | Hvad det er |
|---|---|---|
| `X-AppSecretToken` | `${ECONOMIC_APP_SECRET_TOKEN}` | App-identifikation (din app's hemmelige token) |
| `X-AgreementGrantToken` | `${ECONOMIC_AGREEMENT_GRANT_TOKEN}` | Aftale-specifik adgang (bruger-godkendt) |
| `Content-Type` | `application/json` | Altid JSON |
| `Idempotency-Key` | `<unik UUID>` | Forhindrer dobbeltbogføring ved netværksfejl (POST/PUT) |
⚠️ **Tokens skal ALDRIG hardcodes** — brug miljøvariabler eller en secret manager.
### Demo-mode (sandbox)
Til test/udvikling, tilføj `?demo=true` til URL — alle writes deaktiveres (kun GET).
## Vigtigste endpoints
| Formål | Endpoint | HTTP |
|---|---|---|
| List konti (kontoplan) | `/accounts?pagesize=N` | GET |
| Hent én konto | `/accounts/:accountNumber` | GET |
| List bogføringsår | `/accounting-years` | GET |
| List perioder (måneder) i et år | `/accounting-years/:year/periods` | GET |
| Hent kontosaldo for en periode | `/accounts/:accountNumber/accounting-years/:year/periods/:period/totals` | GET |
| List kassekladder | `/journals` | GET |
| Hent kassekladdeline | `/journals/:id/vouchers?voucherNumber=:n` | GET |
| Opret kassekladdeline (bilag) | `/journals/:id/vouchers/:n/entries` | POST |
| Bogfør voucher | `/journals/:id/vouchers/:n/book` | POST |
| List bogførte fakturaer | `/invoices/booked` | GET |
| Opret bogført faktura | `/invoices/booked` | POST |
| Hent kunde | `/customers/:customerNumber` | GET |
| Opret kunde | `/customers` | POST |
| List kreditorer | `/suppliers` | GET |
| Opret kreditor | `/suppliers` | POST |
| List moms-konti | `/vat-accounts` | GET |
| Hent valutakurser | `/currencies` | GET |
⚠️ **Rate limit**: e-conomic har et fair-use loft. Hold dig under 10 requests/sekund.
## e-conomics standardkontoplan (4-cifret)
| Kontointerval | Type | Bruges til |
|---|---|---|
| 1000-1099 | Heading/profitAndLoss | Indtægter, overskrifter |
| 1100-1199 | ProfitAndLoss | Omsætning undergrupper (varekategorier) |
| 1200-1299 | ProfitAndLoss | Diverse indtægter |
| 1300-1399 | ProfitAndLoss | Produktionsomkostninger (COGS) |
| 1500-1599 | ProfitAndLoss | Lokaleomkostninger |
| 1600-1699 | ProfitAndLoss | Salgsomkostninger |
| 1700-1799 | ProfitAndLoss | Administrationsomkostninger |
| 1800-1899 | ProfitAndLoss | Personaleomkostninger (løn) |
| 2000-2099 | ProfitAndLoss | Andre driftsomkostninger |
| 2100-2199 | ProfitAndLoss | Afskrivninger |
| 2200-2299 | ProfitAndLoss | Finansielle indtægter |
| 2300-2399 | ProfitAndLoss | Finansielle udgifter |
| **5500-5899** | **Balance** | **Bank, kasse, tilgodehavender** |
| 5800-5899 | Balance | Bankkonti (typisk 5820 = drift) |
| 6000-6899 | Balance | Leverandørgæld, moms, A-skat |
| 6500-6599 | Balance | Moms (6500 = indgående, 6600 = udgående) |
| 6900-6999 | Balance | Diverse statuskonti |
⚠️ **Dette er e-conomics STANDARD kontoplan** — ikke alle kunder har den. Hent altid kundens egen kontoplan via `/accounts` endpoint.
## Momskoder (VAT-accounts)
| Kode | Type | Sats | Bruges til |
|---|---|---|---|
| `U25` | Udgående | 25% | Salg af varer/ydelser i DK (momspligtig) |
| `I25` | Indgående | 25% | Køb af varer/ydelser i DK (momsfradrag) |
| `U0` | Udgående | 0% | Eksport, EU-salg med VIES, moms-fritagne ydelser |
| `I0` | Indgående | 0% | Køb uden moms (import under bagatelgrænse) |
| `UEU25` | Udgående | 25% | EU-varesalg (vareleverance til andet EU-land) |
| `UV25` | Udgående | 25% | Byggeydelser i andre EU-lande (omvendt betalingspligt) |
⚠️ Korrekt momskode er afgørende for momsangivelsen — forkert kode kan give skattesmæk.
## Kassekladder (Journals)
| Journal-ID | Navn (typisk) | Bruges til |
|---|---|---|
| 1 | Daglig / Kassekladde | Almindelige bilag (køb, salg, bank) |
| 2 | Indbetalinger | Kundeindbetalinger (kontra-konto typisk 5820 bank) |
| 3 | Lønninger | Lønbogføring (entryType `financeVoucher`) |
| 4 | Moms | Momsafregning |
| 5 | Afskrivninger | Anlægsaktiver |
Journal-ID'er varierer fra kunde til kunde — hent altid `/journals` først.
## Workflow: Bogfør et bilag (kassekladdeline)
### Eksempel: bogfør kontantkøb af kontorartikler for 1.250,00 kr. inkl. moms (15-06-2026)
**Trin 1: Hent kunde-/kassekladde-info**
```
GET /journals
→ Find journal-ID for "Daglig" (typisk 1)
GET /journals/1/vouchers?voucherNumber=42
→ Find næste ledige bilagsnummer
```
**Trin 2: Opret kassekladdeline (visuelt, FØR API-kald)**
```json
{
"accountingYear": {
"year": 2026
},
"entries": [
{
"customerInvoiceNumber": "",
"date": "2026-06-15",
"voucherNumber": 42,
"text": "Kontorartikler — Kontorbutikken A/S",
"amount": -1250.00,
"amountInBaseCurrency": -1250.00,
"currency": "DKK",
"account": {
"accountNumber": 1690
},
"contraAccount": {
"accountNumber": 5820
},
"vatAccount": {
"vatCode": "I25"
}
}
]
}
```
**Trin 3: Vis brugeren og bekræft**
```
⚠️ Klar til at bogføre:
Kassekladde: Daglig (#1)
Bilagsnr: 42
Dato: 15-06-2026
Tekst: Kontorartikler — Kontorbutikken A/S
Debet: 1690 Kontorartikler 1.250,00 kr.
Kredit: 5820 Bank, drift 1.250,00 kr.
Momskode: I25 (25% indgående)
Total: 1.250,00 kr. (inkl. 250,00 kr. moms)
Vil du bogføre? (ja/nej)
```
**Trin 4: POST med Idempotency-Key**
```
POST /journals/1/vouchers/42/entries
Headers:
X-AppSecretToken: ${ECONOMIC_APP_SECRET_TOKEN}
X-AgreementGrantToken: ${ECONOMIC_AGREEMENT_GRANT_TOKEN}
Content-Type: application/json
Idempotency-Key: <UUID v4>
Body: [ovenstående entries-array]
```
⚠️ **Bogfør IKKE før brugeren har bekræftet.**
## Workflow: Synk banktransaktioner
1. **Hent konti** for bank (`/accounts?filter=accountType$eq:balance&pagesize=100`) — find bank-konto (typisk 5820)
2. **Hent kontosaldo** for indeværende periode:
```
GET /accounts/5820/accounting-years/2026/periods/6/totals
```
3. **Sammenlign** med bankens faktiske saldo (fra CSV-import eller bank-API)
4. **Vis diff** og identificer manglende/ukorrekte transaktioner
5. **Foreslå kassekladdeline** for hver manglende transaktion
## Workflow: Hent åbne fakturaer (kunder)
```
GET /invoices/booked?filter=balance$gt:0&pagesize=50
```
Returnerer alle bogførte fakturaer med ubetalt saldo > 0.
For hver faktura:
- `bookedInvoiceNumber` — fakturanr
- `customer.name` — kundenavn
- `netAmount` / `grossAmount` — beløb ekskl./inkl. moms
- `balance` — udestående
- `dueDate` — forfaldsdato (udledes af `termsNetDays` + `date`)
- `currency` — DKK/EUR/USD
Bruges typisk til:
- Inkasso-rapporter (forfaldne >30 dage)
- Aldersopdelt fordringsliste (0-30, 31-60, 61-90, 90+)
- Likviditetsforecast
## Workflow: Opret kunde
```json
POST /customers
{
"name": "Coop Danmark A/S",
"customerGroup": { "customerGroupNumber": 1 },
"paymentTerms": { "paymentTermsNumber": 1 },
"vatZone": { "vatZoneNumber": 1 },
"currency": "DKK",
"address": "Roskildevej 65",
"zip": "2620",
"city": "Albertslund",
"country": "Denmark"
}
```
⚠️ **Tjek altid for duplikat** (søg eksisterende kunder først):
```
GET /customers?filter=name$like:Coop$Danmark
```
## Almindelige fejl
- ❌ **Glemmer Idempotency-Key** ved POST → netværksfejl kan give dobbeltbogføring
- ❌ **Forkert momskode** (U25 vs UEU25) → SKAT fanger det i krydstjek
- ❌ **Brug danske datoer i API** — e-conomic bruger ISO `yyyy-MM-dd` i JSON, IKKE dansk `dd-MM-yyyy`
- ❌ **Beløb uden fortegn-konvention** — negativ = debet, positiv = kredit (modsat dansk regnskabstradition)
- ❌ **PageSize > 1000** uden pagination
- ❌ **POST uden først at have hentet den aktuelle voucher** → 409 Conflict
- ✅ ALTID brug Idempotency-Key ved alle writes
- ✅ ALTID konverter dansk dd-MM-yyyy → ISO yyyy-MM-dd FØR API-kald
- ✅ ALTID verificer kontoplanen (`/accounts`) før bogføring — kunden kan have egne konti
- ✅ ALTID tjek eksisterende kunder/leverandører før oprettelse (dublet-forebyggelse)
- ✅ ALTID vis bogføringsforslag til brugeren FØR API-kald
## Demo-mode anbefaling
Brug ALTID `?demo=true` under udvikling:
- Læs-data virker (GET)
- Skrive-data deaktiveret (POST/PUT returnerer 405)
- Forhindrer utilsigtet bogføring i produktion
- Kan derfor frit browse konti, fakturaer, kunder uden risiko
## Eksempel på aktivering
**Bruger:** "Bogfør et køb af kontorartikler for 1.250 kr. inkl. moms i e-conomic"
**Svar (forkortet):**
> ✅ Forbinder e-conomic...
>
> Klar til bogføring:
>
> | Felt | Værdi |
> |---|---|
> | Kassekladde | Daglig (#1) |
> | Bilagsnr | 42 |
> | Dato | 15-06-2026 |
> | Tekst | Kontorartikler — Kontorbutikken A/S |
> | Debet (1690 Kontorartikler) | 1.250,00 kr. |
> | Kredit (5820 Bank) | 1.250,00 kr. |
> | Momskode | I25 (indgående 25%) |
>
> ⚠️ Bekræft før jeg bogfører. Svaret "ja, bogfør" udløser API-kald med Idempotency-Key.
@@ -0,0 +1,183 @@
---
name: kontoplan-mapping
description: >
Kortlæg transaktioner, fakturaer og bilag til dansk standardkontoplan (SUM, DG, SL) eller
bogføringssystem-specifik kontoplan (e-conomic 4-cifret, Uniconta) — aktiveres ved
"hvilken konto?", "kontoplan", "kontorådgivning", "bogføring af [transaktionstype]",
"hvor skal jeg bogføre dette".
version: 0.2.0
author: radix-accountant
license: MIT
metadata:
hermes:
tags: [accounting, dansk-regnskab, kontoplan, SUM, DG, SL, uniconta, e-conomic]
related: [resultatopgoerelse, momsafregning, dansk-csv-import, e-conomic-integration]
---
# Kontoplan-mapping
Mapper transaktioner og bilag til **korrekt konto i dansk standardkontoplan** (SUM, DG, SL). Bruges som hjælpe-skill af andre skills (resultatopgoerelse, momsafregning, dansk-csv-import, coop-bankimport).
## Aktiveres ved
- "Hvilken konto skal jeg bogføre et kontorlejemål på?"
- "Hvor hører MobilePay-gebyr hjemme i kontoplanen?"
- "Lav en kontoplan for min [virksomhedstype]"
- "Tjek om denne transaktion er konteret korrekt"
## Dansk standardkontoplan — overblik
### Driftskonti (resultatopgørelse)
| Hovedgruppe | Kontointerval | Bruges til |
|---|---|---|
| Omsætning | 1000-1999 | Salg, service, licens, abonnement, eksport |
| Produktionsomkostninger | 2000-2999 | Råvarer, direkte løn, underleverandører, fragt |
| Salgsomkostninger | 3000-3999 | Marketing, salgsfremmende, rejser, repræsentation |
| Administrationsomkostninger | 4000-4999 | Kontor, IT, telefon, kontorartikler, abonnementer |
| Lokaleomkostninger | 5000-5999 | Husleje, varme, el, vand, renovation, rengøring |
| Personaleomkostninger | 6000-6999 | Løn, pension, ATP, feriepenge, AER, sociale bidrag |
| Afskrivninger | 7000-7999 | Lineære afskrivninger, scrap, salg af aktiver |
| Finansielle poster | 8000-8999 | Renter, gebyrer, kursregulering, realiserede tab/gevinst |
| Ekstraordinære poster | 9000-9999 | Ekstraordinære indtægter/udgifter (sjældent) |
### Statuskonti (balance)
| Hovedgruppe | Kontointerval | Bruges til |
|---|---|---|
| Aktiver | 10000-19999 | Tilgodehavender, varelager, anlægsaktiver, bank, kasse |
| Passiver | 20000-29999 | Leverandørgæld, moms, A-skat, skyldig løn, feriepengeforpligtelse |
| Egenkapital | 30000-39999 | Ansvarlig kapital, overført resultat, årets resultat |
## e-conomic standardkontoplan (4-cifret, mest udbredt)
e-conomic leveres med en standard dansk kontoplan. **De fleste danske SMV'er bruger denne uden ændringer.**
### Driftskonti (resultatopgørelse)
| Kontointerval | Bruges til |
|---|---|
| 1000-1099 | Indtægter (heading + omsætning) |
| 1100-1299 | Diverse omsætning og indtægter |
| 1300-1499 | Produktionsomkostninger / varekøb / direkte løn |
| 1500-1599 | Lokaleomkostninger (husleje, el, varme) |
| 1600-1699 | Salgs- og rejseomkostninger (marketing, transport) |
| 1700-1799 | Administrationsomkostninger (kontor, IT, telefon) |
| 1800-1899 | Personaleomkostninger (løn, pension, AER) |
| 1900-2099 | Andre driftsomkostninger, afskrivninger |
| 2100-2299 | Finansielle poster (renter, gebyrer) |
| 2300-2999 | Ekstraordinære poster |
### Statuskonti (balance)
| Kontointerval | Bruges til |
|---|---|
| 5500-5899 | Aktiver — bank, kasse, tilgodehavender (5820 = typisk driftsbank) |
| 6000-6899 | Passiver — leverandørgæld, moms, A-skat, skyldig løn |
| 6500-6599 | Moms (udgående/indgående/afregning) |
| 6900-6999 | Egenkapital, diverse status |
### e-conomic standardkonti — udvalgte
| Kontonr | Navn | Bruges til |
|---|---|---|
| 1010 | Salg af varer/ydelser m/moms | Standard DK-salg (25% moms) |
| 1080 | Salg af varer/ydelser u/moms | Eksport, EU-salg (0% moms) |
| 1300 | Varekøb | Råvarer til videresalg |
| 1500 | Husleje | Kontorlejemål |
| 1510 | El | Elforbrug |
| 1520 | Varme | Opvarmning |
| 1530 | Vand | Vandforbrug |
| 1610 | Rejseudgifter | Transport, hotel, fly |
| 1690 | Kontorartikler | Småanskaffelser, kontorartikler |
| 1700 | Telefon & internet | Mobil, fastnet, internet |
| 1730 | Software / IT-licenser | SaaS-abonnementer, licenser |
| 1800 | Bruttoløn | Lønudbetaling |
| 1810 | Pension | Pensionsbidrag |
| 1820 | ATP | ATP-bidrag |
| 1900 | AER | AER-bidrag |
| 1910 | Feriepenge | Feriepengeforpligtelse |
| 2200 | Bankgebyrer | Gebyrer, renter |
| 2210 | Renteudgifter | Renter på lån |
| 5500 | Kasse | Kontant beholdning |
| 5508 | Bank, drift | Primær driftskonto (typisk) |
| 5820 | Bank, kassekladde | Standard bank-modkonto |
| 6500 | Udgående moms | 25% moms på salg |
| 6510 | Indgående moms | 25% moms på køb |
| 6520 | Momsafregning | Saldo (kredit = skyldig, debet = tilgodehavende) |
⚠️ **Tjek altid kundens egen kontoplan** via `GET /accounts` (e-conomic) eller Uniconta-eksport — der kan være afvigelser.
## Almindelige transaktioner — hurtig-mapping (alle systemer)
| Transaktion | SUM/DG | e-conomic | Type |
|---|---|---|---|
| Salg af vare (DK) | 1010 | 1010 | Driftsindtægt |
| Salg af ydelse (DK) | 1020 | 1010 | Driftsindtægt |
| Eksport (0% moms) | 1030 | 1080 | Driftsindtægt |
| Varekøb (DK) | 2010 | 1300 | Driftsomkostning |
| Kontorartikler | 4010 | 1690 | Driftsomkostning |
| Software-abonnement | 4030 | 1730 | Driftsomkostning |
| Hosting / cloud | 4030 | 1730 | Driftsomkostning |
| Husleje | 5010 | 1500 | Driftsomkostning |
| El, vand, varme | 5020-5040 | 1510-1530 | Driftsomkostning |
| Internet, telefon | 5050 | 1700 | Driftsomkostning |
| MobilePay-gebyr | 8010 | 2200 | Driftsomkostning (finansiel) |
| Stripe-gebyr | 8010 | 2200 | Driftsomkostning (finansiel) |
| Bankgebyr | 8020 | 2200 | Driftsomkostning (finansiel) |
| Renteindtægt | 8030 | 2210 (neg.) | Driftsindtægt (finansiel) |
| Renteudgift | 8040 | 2210 | Driftsomkostning (finansiel) |
| Løn til ansat | 6010 | 1800 | Personaleomkostning |
| A-skat (trukket fra løn) | 2090 | 6810 | Forpligtelse |
| Pension (arbejdsgivers andel) | 6020 | 1810 | Personaleomkostning |
| Feriepenge (reserveret) | 6015 | 1910 | Personaleomkostning |
| Moms, udgående | 2060 | 6500 | Forpligtelse |
| Moms, indgående | 2070 | 6510 | Tilgodehavende (modregnes) |
| Moms, afregning | 2080 | 6520 | Forpligtelse/Tilgodehavende |
| Bank (drift) | 5810 | 5508 / 5820 | Aktiv |
⚠️ **Tallene er eksempler iht. SUM-standarden** (Standard for virksomheders økonomistyring). Mange SMV'er bruger deres egen tilpassede kontoplan — **bekræft altid med virksomhedens egen kontoplan** inden bogføring.
## Workflow
1. **Modtag transaktionstype** (eller specifik transaktion)
2. **Find relevant kontointerval** (se tabellerne ovenfor)
3. **Anvend kontekst-regler**:
- Virksomhedstype (enkeltmands, ApS, A/S, forening) → kan have egne konti
- Branche (detail, engros, service, IT, produktion) → brancherelaterede konti
- Skatteforhold (momsregistrering, CVR, SElvangivelse) → særlige konti
4. **Vis anbefaling med begrundelse**:
- Kontonr, kontonavn, kontogruppe
- Hvorfor denne konto og ikke en alternativ
5. **Alternativer**: vis 1-2 alternative konti hvis der er rimelig tvivl
6. **Bekræft med bruger** — kontoplan-valg er en menneskelig beslutning, ikke en agent-beslutning
## Eksempel-aktivering
**Bruger:** "Hvor skal jeg bogføre et Stripe-gebyr på 234,56 kr.?"
**Svar:**
> **Anbefalet konto:** 8010 — Gebyrer, betalingsformidlere
>
> **Begrundelse:** Stripe-gebyrer er **finansielle omkostninger** (betalingsformidling), ikke driftsomkostninger. De hører under hovedgruppe 8 (Finansielle poster) og bogføres typisk sammen med bankgebyrer og renter.
>
> **Bogføring:**
> ```
> DEBET 8010 Gebyrer, betalingsformidlere 234,56
> KREDIT 5810 Bank, driftskonto 234,56
> ```
>
> **Alternativer:**
> - 8030 (Renteudgifter) — hvis virksomheden samler alle gebyrer dér (mindre korrekt)
> - 4025 (Salgsomkostninger, eksterne) — hvis virksomheden klassificerer alle salgsrelaterede omkostninger under salg
>
> ⚠️ *Dette er ikke bogføringsrådgivning. Kontakt din revisor for endelig kontoplan.*
## Særlige regler
- ❌ ALDRIG foreslå en konto uden begrundelse
- ❌ ALDRIG antag at kontoplanen følger SUM-standarden — bekræft med brugeren
- ❌ ALDRIG modificér kontoplanen uden advarsel og dobbeltgodkendelse
- ✅ ALTID vis kontogruppe (drift/balance) og sektion (omsætning/omkostning/aktiv/passiv)
- ✅ ALTID vis alternativer når der er rimelig tvivl
- ✅ ALTID medtag "Dette er ikke bogføringsrådgivning" disclaimer
+161
View File
@@ -0,0 +1,161 @@
---
name: momsafregning
description: >
Beregn dansk momsangivelse (moms, momsfradrag, momsrefusion) til SKAT — aktiveres ved
forespørgsler om "moms", "momsangivelse", "momsrefusion", "kvartalsmoms", "halvårsmoms",
"momsregnskab", "25% moms", "momsfri".
version: 0.1.0
author: radix-accountant
license: MIT
metadata:
hermes:
tags: [accounting, dansk-regnskab, moms, skat, momsangivelse]
related: [resultatopgoerelse, kontoplan-mapping, dansk-csv-import]
---
# Dansk Momsafregning
Forbereder **momsangivelse** klar til indberetning via SKAT's TastSelv Erhverv (eller skat.dk). Håndterer både **kvartalsmoms** (små/mellemstore virksomheder) og **halvårsmoms** (helårsmomsansøgere, mikrovirksomheder under 5 mio. kr. i omsætning).
## Aktiveres ved
- "Beregn moms for Q2 2026"
- "Forbered momsangivelse for maj 2026"
- "Hvad er min momsrefusion for hele 2025?"
- "Hvornår skal jeg indberette moms næste gang?"
## Danske momssatser (gældende)
| Sats | Bruges til |
|---|---|
| **25%** | Standard (langt de fleste varer og ydelser i Danmark) |
| **0%** | Eksport ud af EU, visse avis/abonnementer, kunstnerisk virksomhed under 300.000 kr. |
| Fritaget | Sygehusbehandling, undervisning, finansielle ydelser, forsikring |
⚠️ **Bemærk**: EU-lande har forskellige satser, men denne skill håndterer **kun dansk moms**. For EU-handel brug særskilt sub-skill (ikke del af denne version).
## Kontogruppering (dansk standardkontoplan + e-conomic)
| Konto (SUM) | Konto (e-conomic) | Navn | Beløb i momsangivelsen |
|---|---|---|---|
| 1100-1199 | 1010 | Salg af varer/ydelser (DK, 25%) | Rubrik A: Varesalg (momspligtig) |
| 1200-1299 | 1010 | Salg af ydelser (DK, 25%) | Rubrik A: Ydelsessalg (momspligtig) |
| 1500-1599 | 1080 | Eksport (0% moms) | Rubrik A: EU-salg/eksport |
| 1600-1699 | 1300 | Råvarer/varekøb (DK, 25%) | Rubrik B: Varekøb (momsfradrag) |
| 1700-1799 | 1690 / 1730 | Driftsomkostninger (DK, 25%) | Rubrik B: Driftsomkostninger (momsfradrag) |
| 1800-1899 | 1800 | Import (køb fra udland) | Rubrik B: Import |
| 1900-1999 | — | Køb af ydelser uden moms | (ingen moms at fradrage) |
| 2060 | 6500 | Udgående moms | (salgsmoms) |
| 2070 | 6510 | Indgående moms | (momsfradrag) |
| 2080 | 6520 | Momsafregning | (saldo) |
⚠️ **Tjek altid kundens egen kontoplan** — de faktiske kontonumre kan variere. Ovenstående er standard-reference for både SUM (dansk standardkontoplan) og e-conomic (4-cifret).
## Struktur (momsangivelse, kvartal)
```
MOMSANGIVELSE — [Kvartal] [År]
═══════════════════════════════════════════════════
Periode: [dd-MM-yyyy] til [dd-MM-yyyy]
CVR: [hentes fra Radix]
═══════════════════════════════════════════════════
RUBRIK A — UDGÅENDE MOMS (moms af salg)
───────────────────────────────────────────────────
A1 Varesalg, momspligtig (25%) 1.234.567,89
A2 Ydelsessalg, momspligtig (25%) 89.012,34
A3 Varesalg, EU/eksport (0%) 0,00
A4 Ydelsessalg, EU (0%) 0,00
...
Udgående moms i alt (25% af A1+A2) 330.895,06
───────────────────────────────────────────────────
RUBRIK B — INDGÅENDE MOMS (moms på køb, kan fradrages)
───────────────────────────────────────────────────
B1 Varekøb, momsfradrag (25%) 450.123,45
B2 Driftsomkostninger, momsfradrag (25%) 67.890,12
B3 Import, betalt toldmoms 0,00
...
Indgående moms i alt (25% af B1+B2) 129.503,39
───────────────────────────────────────────────────
RUBRIK C — SALGSMOMS (MOMS DER SKAL INDBETALES)
═══════════════════════════════════════════════════
Udgående moms 330.895,06
Indgående moms 129.503,39
───────────────────────────────────────────────────
SALGSMOMS 201.391,67
═══════════════════════════════════════════════════
Hvis positiv: SKAT skylder dig penge
Hvis negativ: Du skylder SKAT penge
───────────────────────────────────────────────────
INDBETALINGSFRIST
───────────────────────────────────────────────────
Kvartalsmoms: 1. i 3. måned efter kvartalets udløb
Eksempel: Q1 (jan-mar) → frist 1. juni
═══════════════════════════════════════════════════
```
## Workflow
1. **Spørg om periode** (måned, kvartal, halvår)
2. **Bekræft virksomhedstype**: lille/mellemstor (kvartal) eller helårsmomsansøger (halvår)
3. **Hent salg og køb** fra Radix ERP for perioden
4. **Adskil konti** efter momssats (25%, 0%, fritaget)
5. **Beregn udgående moms** (moms af eget salg) og **indgående moms** (moms af køb)
6. **Beregn salgsmoms** = udgående moms indgående moms
7. **Vis beløb at indberette** (positiv = SKAT skylder dig, negativ = du skylder SKAT)
8. **Angiv indberetningsfrist** iht. SKAT's regler
9. **Tilbyd at generere SKAT XML/CSV** (hvis brugeren vil indberette direkte)
## Reverse charge (vigtig!)
For køb af ydelser fra udlandet (fx en tysk konsulent):
- **Køber** skal selv beregne og indberette momsen (reverse charge)
- Konti der er reverse charge: typisk 1900-1999 (køb af ydelser uden moms i købsprisen)
- I momsangivelsen: medtag i **Rubrik A** (både salg OG køb) og **Rubrik B** som fradrag — nettoeffekten er nul, men SKAT kræver begge beløb indberettet
## Almindelige fejl
- ❌ Medtag IKKE lønudgifter i momsbasis (løn er momsfri i DK)
- ❌ Medtag IKKE renter i momsbasis (finansielle ydelser er fritaget)
- ❌ Glem IKKE reverse charge-beløb — SKAT krydstjekker
- ❌ Brug IKKE EUR-sats for DK-virksomheder — 25% er dansk standardsats
- ✅ ALTID angiv CVR-nummer i rapporten
- ✅ ALTID vis "Dette er ikke skatterådgivning — kontakt din revisor/SKAT" på momsangivelser
## SKAT-frister (2026)
| Type | Periode | Frist |
|---|---|---|
| Kvartalsmoms | Q1 (jan-mar) | 1. juni |
| Kvartalsmoms | Q2 (apr-jun) | 1. september |
| Kvartalsmoms | Q3 (jul-sep) | 1. december |
| Kvartalsmoms | Q4 (okt-dec) | 1. marts (næste år) |
| Halvårsmoms | H1 (jan-jun) | 1. september |
| Halvårsmoms | H2 (jul-dec) | 1. marts (næste år) |
| Moms, mikrovirksomhed (<5 mio. kr.) | Helår (jan-dec) | 1. marts (næste år, men kun hvis ansøgt om helårsmoms) |
⚠️ Frister kan ændre sig — tjek altid skat.dk for aktuelle frister.
## Eksempel på aktivering
**Bruger:** "Forbered momsangivelse for Q2 2026"
**Svar (forkortet):**
> Momsangivelse for perioden 01-04-2026 til 30-06-2026:
>
> | Rubrik | Beløb | Moms |
> |---|---|---|
> | A1 Varesalg | 234.567,89 | 58.641,97 |
> | A2 Ydelsessalg | 12.345,67 | 3.086,42 |
> | B1 Varekøb | 89.012,34 | 22.253,09 |
> | B2 Driftsomk. | 23.456,78 | 5.864,20 |
> | **Salgsmoms** | | **33.611,10** |
>
> **Frist:** 01-09-2026 (1. september 2026)
>
> *Dette er ikke skatterådgivning. Kontakt din revisor eller SKAT for endelig indberetning.*
+104
View File
@@ -0,0 +1,104 @@
---
name: radix-accountant
description: >
Dansk bogføring, regnskab og ERP-assistance til Radix-portalen — aktiveres ved forespørgsler om
resultatopgørelse, momsafregning, kontoplan, CSV-import, bankafstemning, Uniconta-integration,
e-conomic-integration eller Coop Danmark-reconciliation. Svar altid på dansk, brug dansk
talformatering (1.234.567,89) og dd-MM-yyyy datoformat.
version: 0.2.0
author: radix-accountant
license: MIT
metadata:
hermes:
tags: [accounting, dansk-regnskab, moms, radix-erp, uniconta, e-conomic, coop]
related: [resultatopgoerelse, momsafregning, kontoplan-mapping, dansk-csv-import, coop-bankimport, e-conomic-integration]
---
# radix-accountant
Dansk bogførings- og regnskabsassistent skræddersyet til **Radix ERP** (CRM/ERP kørt på portal.radixadm.dk) med integration mod **Uniconta** (lokalt), **e-conomic** (cloud-bogføring) og **Coop Danmark**-afstemningsflow.
## Aktiveres ved
Når brugeren skriver på dansk om:
- **Resultatopgørelse, P&L, årsregnskab, balance, indtægter/udgifter** → `resultatopgoerelse`
- **Moms, momsangivelse, momsfradrag, momsrefusion, kvartals-/halvårsmoms, 25% / 0%** → `momsafregning`
- **CSV-import, bank-eksport, kontoudtog, Nordea/Danske Bank/Jyske/Sydbank-format** → `dansk-csv-import`
- **Coop Danmark, bankbetaling, opgørelse, afstemning mod fakturaer** → `coop-bankimport`
- **Kontoplan, kontonummer, dansk standardkontoplan, finanskonto, postering** → `kontoplan-mapping`
- **e-conomic, bogfør i e-conomic, hent fakturaer fra e-conomic, kassekladde, sync mod e-conomic** → `e-conomic-integration`
## Faste konventioner (BINDENDE for alle sub-skills)
| Parameter | Værdi |
|---|---|
| Sprog | Dansk (alle svar, prompts, fejlmeddelelser) |
| Talformatering | `1.234.567,89` — punktum som tusindtalsseparator, komma som decimal |
| Negativ beløb | `1.234,56` med unicode minus-tegn (Unicode minus U+2212), ALDRIG `-` |
| Datoformat | `dd-MM-yyyy` (fx `15-06-2026`) |
| Klokkeslæt | `HH:mm` 24-timers (fx `14:35`) |
| Valuta | `kr.` eller `DKK` — aldrig `$` medmindre brugeren eksplicit beder om anden valuta |
| Moms | `25%` (standard), `0%` (fritagne ydelser), `ekskl. moms` / `inkl. moms` |
| Kontoplan reference | **e-conomic**: 4-cifret DK-standard (1000-9999). **Uniconta**: egen struktur. **SUM/DG/SL**: generisk dansk standard |
| Decimaler i rapporter | 2 decimaler for beløb, 1 decimal for procenter, 0 decimaler for heltal |
| Afrundingsregel | Banker's rounding (half-even) for at matche dansk bogføringspraksis |
| Bank reference | BIC + 10-cifret kontonr (dansk format) eller bank-reference fra CSV |
## Reference-miljø
- **Radix ERP**: kører på `https://portal.radixadm.dk` (DEBUG=True bevidst, dansk datoformat bevidst)
- **Test-login**: `testadmin@example.dk` / `test1234` (KUN til test/udvikling — ALDRIG persistér i rapporter)
- **Uniconta**: lokalt bogføringssystem, fakturaer og kreditorer hentes derfra
- **e-conomic**: cloud-bogføring (https://www.e-conomic.dk), REST API på `https://restapi.e-conomic.com`, OAuth-baseret adgang via AppSecretToken + AgreementGrantToken
- **Coop Danmark**: bankbetalinger + specifikationer (opgørelser) per indbetaling
## Bogføringssystem — hvornår bruges hvad
| System | Bruges til | Fordel | Ulempe |
|---|---|---|---|
| **Uniconta** | Dansk lokalt bogføringssystem, mange SMV'er | Lokal kontrol, dyb funktionalitet | Kræver installation |
| **e-conomic** | Cloud-bogføring, Danmarks mest udbredte | Altid tilgængeligt, stærk API, gratis for små | Begrænset fleksibilitet i kontoplan |
| **Radix ERP (egen)** | Intern ERP, CRM-delen | Integreret med Radix-data | Bogføring er ikke primær funktion |
**Standardantagelse**: Hvis brugeren ikke specificerer, brug **e-conomic** (mest udbredt i danske SMV'er og har den bedste API). Spørg hvis det er uklart.
## Workflow
1. **Identificér brugerens hensigt** ud fra nøgleord (se listen ovenfor)
2. **Aktivér den relevante sub-skill** ved at indlæse dennes `SKILL.md` først
3. **Anvend de faste konventioner** i alle output (sprog, tal, dato, valuta)
4. **Bekræft data med brugeren** før du skriver noget tilbage til Radix/Uniconta/e-conomic (aldrig stille skriv)
5. **Generer rapporten** med tydelig header, periode, totaler og fodnoter
6. **Vis altid kildereference** (transaktions-id, fakturanummer, bankreference) i rapporter
## Vigtige regler
- ❌ ALDRIG bogfør uden brugerens eksplicitte godkendelse — vis diff først
- ❌ ALDRIG antag valuta — bekræft `DKK`/`EUR`/`USD` hvis ikke tydeligt
- ❌ ALDRIG brug amerikansk/UK-formatering (`,` som tusindtalsseparator) — det er den forkerte vej rundt for dansk
- ❌ ALDRIG modificér kontoplanen uden advarsel — ændringer kræver dobbeltgodkendelse
- ❌ ALDRIG hardcode API-tokens i eksempler — brug altid `${ECONOMIC_APP_SECRET_TOKEN}` placeholder-syntaks
- ❌ ALDRIG bogfør bilag i e-conomic uden først at vise `entries` JSON til brugeren
- ✅ ALTID vis "Dette er ikke bogføringsrådgivning — kontakt din revisor" på alle moms- og årsregnskabsrapporter
- ✅ ALTID angiv kilde (bankfil, Uniconta-id, e-conomic-bogføringsnr, faktura-nr) for hvert tal
- ✅ ALTID spørg før du sletter — brug aldrig `DELETE` uden bekræftelse
- ✅ ALTID brug Idempotency-Key ved POST/PUT til e-conomic API (forhindrer dobbeltbogføring ved netværksfejl)
## Sub-skills
| Skill | Formål |
|---|---|
| [resultatopgoerelse](resultatopgoerelse/SKILL.md) | Byg dansk P&L/resultatopgørelse med korrekt kontogruppering |
| [momsafregning](momsafregning/SKILL.md) | Beregn momsangivelse (kvartal/halvår), klar til SKAT-indberetning |
| [kontoplan-mapping](kontoplan-mapping/SKILL.md) | Map transaktioner til dansk standardkontoplan (SUM/DG/SL/e-conomic) |
| [dansk-csv-import](dansk-csv-import/SKILL.md) | Importér danske bank-CSV'er (Nordea, Danske Bank, Jyske, Sydbank) |
| [coop-bankimport](coop-bankimport/SKILL.md) | Reconcilier Coop Danmark bankbetalinger mod Uniconta- eller e-conomic-fakturaer |
| [e-conomic-integration](e-conomic-integration/SKILL.md) | Integration med e-conomic cloud-bogføring (auth, konti, kassekladde, fakturaer) |
## Reference-dokumenter
- `REFERENCES/dansk_kontoplan.md` — Oversigt over SUM/DG/SL-konti (kort)
- `REFERENCES/momssatser.md` — Aktuelle danske momssatser og fritagelser
- `REFERENCES/coop_format.md` — Forventet format på Coop opgørelser (PDF/Excel)
- `REFERENCES/economic_api.md` — e-conomic REST API endpoints og auth-flow
@@ -0,0 +1,148 @@
---
name: resultatopgoerelse
description: >
Byg en dansk resultatopgørelse (P&L) ud fra Radix ERP-data — aktiveres ved forespørgsler om
"resultatopgørelse", "P&L", "årsregnskab", "indtjening pr. måned/kvartal/år".
version: 0.1.0
author: radix-accountant
license: MIT
metadata:
hermes:
tags: [accounting, dansk-regnskab, resultatopgoerelse, radix-erp]
related: [kontoplan-mapping, momsafregning]
---
# Resultatopgørelse (Dansk P&L)
Genererer en **dansk resultatopgørelse** med korrekt kontogruppering iht. dansk standardkontoplan, dansk talformatering (`1.234.567,89`) og dansk terminologi (Bruttofortjeneste, Driftsresultat, Årets resultat).
## Aktiveres ved
- "Vis resultatopgørelsen for Q1 2026"
- "Hvad er bruttofortjenesten for maj?"
- "Generer P&L for hele 2025"
- "Sammenlign omsætning mellem januar og februar 2026"
## Struktur (standard dansk resultatopgørelse)
```
RESULTATOPGØRELSE — [Periode]
═══════════════════════════════════════════════════
NETTOOMSÆTNING
Salg af varer/ydelser (konto 1000-1099) 1.234.567,89
Andre driftsindtægter (konto 1100-1199) 5.678,90
───────────────────────────────────────────────────
Nettoomsætning i alt 1.240.246,79
VAREFORBRUG / COGS
Varekøb (konto 1300-1399) 450.123,45
Direkte løn (konto 1400-1499) 89.012,34
Fragt/emballage (konto 1500-1599) 12.345,67
───────────────────────────────────────────────────
Vareforbrug i alt 551.481,46
═══════════════════════════════════════════════════
BRUTTOFORTJENESTE 688.765,33
Bruttomargin 55,5%
EKSTERNE OMKOSTNINGER
Salgsomkostninger (konto 1600-1699) 23.456,78
Lokaleomkostninger (konto 1700-1799) 45.678,90
Administrationsomkostninger (1800-1899) 34.567,89
───────────────────────────────────────────────────
Eksterne omkostninger i alt 103.703,57
═══════════════════════════════════════════════════
DRIFTSRESULTAT FØR AFSKRIVNINGER (EBITDA) 585.061,76
EBITDA-margin 47,2%
AFSKRIVNINGER
Afskrivninger (konto 2000-2099) 50.000,00
───────────────────────────────────────────────────
Afskrivninger i alt 50.000,00
═══════════════════════════════════════════════════
DRIFTSRESULTAT (EBIT) 535.061,76
Driftsmargin 43,2%
FINANSIELLE POSTER
Renteindtægter (konto 2100-2199) 1.234,56
Renteudgifter (konto 2200-2299) 5.678,90
Kursreguleringer (konto 2300-2399) 789,01
───────────────────────────────────────────────────
Finansielle poster i alt 3.655,33
═══════════════════════════════════════════════════
RESULTAT FØR SKAT 531.406,43
Skat (konto 2500-2599) 117.149,42
───────────────────────────────────────────────────
═══════════════════════════════════════════════════
ÅRETS RESULTAT 414.257,01
Nettoavance 33,4%
═══════════════════════════════════════════════════
```
## Workflow
1. **Spørg om periode** (måned, kvartal, år, eller brugerdefineret datointerval)
2. **Hent data fra Radix ERP** via API eller Uniconta-eksport — spørg brugeren hvilken kilde der foretrækkes
3. **Gruppér konti** efter dansk standardkontoplan-struktur (se kontoplan-mapping skill)
4. **Beregn totaler** for hver sektion (Nettoomsætning, Vareforbrug, Eksterne omkostninger, osv.)
5. **Beregn marginer**:
- Bruttomargin = Bruttofortjeneste / Nettoomsætning × 100
- EBITDA-margin = EBITDA / Nettoomsætning × 100
- Driftsmargin = EBIT / Nettoomsætning × 100
- Nettoavance = Årets resultat / Nettoomsætning × 100
6. **Formater tal** iht. faste konventioner (punktum tusindtalsseparator, komma decimal)
7. **Vis rapport** med tydelig periode, totaler og marginer
8. **Tilbyd sammenligning** med tilsvarende periode året før (hvis data findes)
## Sammenlignings-rapport (bonus)
Når brugeren beder om en sammenligning:
```
SAMMENLIGNING — [Periode A] vs [Periode B]
═══════════════════════════════════════════════════
Periode A Periode B Ændring
────────────────────────────────────────────────────────────
Nettoomsætning 1.234.567,89 1.100.000,00 +12,2%
Bruttofortjeneste 688.765,33 590.000,00 +16,7%
Bruttomargin 55,5% 53,6% +1,9 pp
Driftsresultat (EBIT) 535.061,76 420.000,00 +27,4%
Driftsmargin 43,2% 38,2% +5,0 pp
Årets resultat 414.257,01 310.000,00 +33,6%
═══════════════════════════════════════════════════
```
`pp` = procentpoint (almindelig dansk regnskabsterm).
## Almindelige fejl at undgå
- ❌ Vis "" som `-` (bindestreg) — brug Unicode minus `` (U+2212) for korrekt typografi
- ❌ Bland ikke `1.234,56` (dansk) med `1,234.56` (US) — brug ALTID dansk
- ❌ Medtag ikke moms i omsætningstallet — nettoomsætning er ekskl. moms
- ❌ Vis ikke "EBIT" som "Driftsresultat" og "EBITDA" som "Driftsresultat før afskrivninger" som om de er det samme — de er forskellige
- ✅ ALTID vis "Dette er ikke bogføringsrådgivning" i årsregnskaber
## Eksempel på aktivering
**Bruger:** "Vis mig resultatopgørelsen for 2025"
**Svar (forkortet):**
> Henter transaktioner for perioden 01-01-2025 til 31-12-2025 fra Radix ERP...
>
> ```
> RESULTATOPGØRELSE — 01-01-2025 til 31-12-2025
> ═══════════════════════════════════════════════
> Nettoomsætning i alt 12.345.678,90
> ...
> ÅRETS RESULTAT 4.142.570,10
> Nettoavance 33,6%
> ═══════════════════════════════════════════════
> ```
>
> *Dette er ikke bogføringsrådgivning. Kontakt din revisor for årsregnskab.*