Files
Radix-Skills/skills/accounting/e-conomic-integration/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

291 lines
10 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: 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.