e-conomic integration — eksport af varmeregnskab til bogføring
Sådan eksporterer du varmeregnskab fra M-Bus Gateway til e-conomic: CSV-import, OIOUBL-faktura, REST API-integration og automatisk bogføring af á conto og efterbetaling.
Af M-Bus Gateway
e-conomic er Danmarks mest brugte regnskabssystem for SMV. Her er hvordan du forbinder varmeregnskabet fra M-Bus Gateway med e-conomic — fra manuel CSV-import til fuld API-automatisering.
Hvad skal bogføres?
Varmeregnskab genererer typisk tre typer posteringer:
| Postering | Timing | e-conomic konto |
|---|---|---|
| Á conto modtaget fra lejer | Månedligt | 1510 (forudbetalinger) |
| Fjernvarmefaktura betalt | Årsligt/kvartal | 3110 (varmeudgifter) |
| Efterbetaling (fra lejer) | Ved årsafregning | 3900 (varmeindtægter) |
| Tilbagebetaling (til lejer) | Ved årsafregning | 3900 (varmeindtægter) |
Metode 1: CSV-import (ingen API-opsætning)
Platformen eksporterer afregningslinjer som CSV med UTF-8 BOM (dansk Excel-kompatibel):
Eksporter fra: /portal/settlements → Eksporter CSV
CSV-format:
lejlighed_id, lejer_navn, adresse, periode_start, periode_slut,
total_kr, a_conto_kr, efterbetaling_kr, tilbagebetaling_kr, status
Import til e-conomic:
- Download CSV fra portalen
- e-conomic → Rapporter → Importer → CSV
- Map kolonner til e-conomic kontoplan
- Batch-opret debitorfakturaer
Fordel: Ingen teknisk opsætning. Ulempe: Manuelt trin pr. periode.
Metode 2: OIOUBL-faktura (direkte til e-conomic)
e-conomic understøtter OIOUBL 2.1 XML-import via NemHandel/EAN:
# Download OIOUBL-faktura pr. afregning:
GET /api/v1/settlements/{settlement_id}/oioubl
# Response: UBL 2.1 Invoice XML med:
# - InvoiceLine pr. lejlighed (varme-andel)
# - TaxTotal (ingen moms på varme til private)
# - PaymentTerms (14 dage standard)
# - AccountingSupplierParty (din virksomhed)
# - AccountingCustomerParty (lejers data)
Import til e-conomic:
- Download OIOUBL XML
- e-conomic → Køb/Salg → Importer faktura → Upload XML
- e-conomic matcher automatisk til debitorer
Krav: Ejendom skal have EAN-nummer sat i portalen.
Metode 3: e-conomic REST API (fuld automatisering)
e-conomic har et komplet REST API (app.e-conomic.com/api).
Opsætning
# Installer e-conomic Python SDK:
pip install economic-rest
# Eller brug requests direkte:
import requests
ECONOMIC_BASE = "https://restapi.e-conomic.com"
HEADERS = {
"X-AppSecretToken": "demoToken", # Din app-token
"X-AgreementGrantToken": "demoToken", # Kundens token
"Content-Type": "application/json",
}
Opret debitor (lejer) automatisk
def create_or_get_debtor(lejer_navn: str, lejer_email: str) -> dict:
# Søg eksisterende debitor
r = requests.get(
f"{ECONOMIC_BASE}/customers",
params={"filter": f"email$eq:{lejer_email}"},
headers=HEADERS,
)
existing = r.json().get("collection", [])
if existing:
return existing[0]
# Opret ny debitor
payload = {
"name": lejer_navn,
"email": lejer_email,
"currency": "DKK",
"customerGroup": {"customerGroupNumber": 1},
"paymentTerms": {"paymentTermsNumber": 14}, # 14 dage netto
"vatZone": {"vatZoneNumber": 1}, # Indland, ingen moms
}
r = requests.post(f"{ECONOMIC_BASE}/customers", json=payload, headers=HEADERS)
return r.json()
Opret faktura for efterbetaling
def create_settlement_invoice(settlement_line: dict) -> str:
"""Opretter e-conomic-faktura for én lejlighedsafregning."""
customer = create_or_get_debtor(
settlement_line["tenant_name"],
settlement_line["tenant_email"],
)
payload = {
"date": settlement_line["sent_at"][:10],
"currency": "DKK",
"customer": {"customerNumber": customer["customerNumber"]},
"layout": {"layoutNumber": 17}, # Din fakturalayout
"lines": [{
"lineNumber": 1,
"product": {"productNumber": "VARME-EXTRA"},
"description": (
f"Varmeefterregning {settlement_line['period_start']} "
f"– {settlement_line['period_end']}, "
f"{settlement_line['address']}"
),
"quantity": 1,
"unitNetPrice": settlement_line["balance_kr"], # Positivt = efterbetaling
}],
}
r = requests.post(f"{ECONOMIC_BASE}/invoices/drafts", json=payload, headers=HEADERS)
invoice = r.json()
# Book faktura med det samme:
r2 = requests.post(
f"{ECONOMIC_BASE}/invoices/booked",
json={"draftInvoice": {"draftInvoiceNumber": invoice["draftInvoiceNumber"]}},
headers=HEADERS,
)
return r2.json().get("bookedInvoiceNumber")
Webhook-integration (real-time)
Platformen udsender webhooks ved nøglehændelser:
// POST til din webhook-URL ved settlement afsendelse:
{
"event": "settlement.sent",
"settlement_id": "SET-2025-001",
"property_id": "EJD-001",
"period": "2024-06-01/2025-05-31",
"lines": [
{
"unit_id": "U-001",
"tenant_name": "Anders Jensen",
"tenant_email": "anders@example.com",
"total_kr": 18420,
"a_conto_kr": 21600,
"balance_kr": -3180, // Negativ = tilbagebetaling
"address": "Eksempelvej 1, 1. tv."
}
]
}
# Flask webhook-modtager der poster til e-conomic:
from flask import Flask, request
app = Flask(__name__)
@app.route("/webhook/settlement", methods=["POST"])
def handle_settlement():
data = request.json
for line in data["lines"]:
if line["balance_kr"] > 0:
# Efterbetaling → opret salgsfaktura
create_settlement_invoice(line)
elif line["balance_kr"] < 0:
# Tilbagebetaling → opret kreditnota
create_credit_note(line)
return {"status": "ok"}, 200
Bogføring af fjernvarmefaktura
def book_district_heating_invoice(annual_input: dict):
"""Bogfør årets fjernvarmefaktura som kreditorfaktura."""
payload = {
"date": annual_input["invoice_date"],
"currency": "DKK",
"supplier": {"supplierNumber": 5001}, # Din fjernvarmeleverandør
"lines": [{
"account": {"accountNumber": 3110}, # Varmeudgifter
"description": f"Fjernvarme {annual_input['period']}",
"debitAmount": annual_input["total_kr"],
}],
}
requests.post(f"{ECONOMIC_BASE}/supplier-invoices/drafts", json=payload, headers=HEADERS)
Kontoplan — anbefalede konti
| Konto | Navn | Type |
|---|---|---|
| 1510 | Forudbetalinger varme (á conto) | Passiv (kortsigtet) |
| 3110 | Varmeudgifter (fjernvarme) | Udgift |
| 3900 | Varmeindtægter (efterbetaling) | Indtægt |
| 3901 | Tilbagebetaling varme | Udgift |
Business Central og andre systemer
Princippet er det samme for Microsoft Business Central, Uniconta og Billy:
| System | API | CSV | OIOUBL |
|---|---|---|---|
| e-conomic | ✅ REST | ✅ | ✅ |
| Business Central | ✅ OData | ✅ | ✅ |
| Uniconta | ✅ REST | ✅ | ⚠️ |
| Billy | ✅ REST | ✅ | ❌ |
| Dinero | ✅ REST | ✅ | ❌ |
Konklusion
e-conomic integration med varmeregnskabet kan sættes op på tre niveauer: manuel CSV (ingen opsætning), OIOUBL-faktura (standardformat) eller fuld REST API-automatisering med webhooks. De fleste private udlejere starter med CSV og opgraderer til API efterhånden som porteføljen vokser.