M-Bus Gateway
← Tilbage til blog
· selskabsudlejer· ejendomsadministration· varmeregnskab· BEK 563· revision· OIOUBL· multi-ejendom

Varmeregnskab for selskabsudlejere — professionel ejendomsadministration

Varmeregnskab for selskaber og professionelle udlejere: juridisk ansvar, revision, OIOUBL, multi-ejendom administration, intern kontrol og platformintegration.

Af M-Bus Gateway

Selskaber med mange udlejningsejendomme har særlige krav til intern kontrol, revision og systemintegration. Her er guiden til professionel ejendomsadministration.


Juridisk ansvar i selskab

Selskab som udlejer (ApS/A/S):

Ledelsesansvar:
  → Direktøren er ansvarlig for korrekt varmeregnskab
  → BEK 563-overtrædelse: Kan medføre erstatningsansvar
  → Huslejenævnsafgørelser: Bindende for selskabet

Revision:
  → Selskaber med regnskabspligt (ApS over grænse): Revision kræves
  → Varmeregnskaber er del af årsregnskabet
  → Revisor kontrollerer: AnnualInput dokumentation, BEK 563-compliance

GDPR:
  → Selskabet er dataansvarlig for lejerdata
  → Databehandleraftale med platform nødvendig
  → Platform auto-genererer databehandleraftale ved oprettelse

OIOUBL-fakturering:
  → Kræves ved leverance til offentlige selskaber/kommuner
  → Ejendom skal have EAN-nummer
  → Platform: `/api/v1/settlements/{id}/oioubl` eksport

Multi-ejendom administration

Typisk portefølje:
  Selskab med 15 ejendomme × 20 lejligheder = 300 lejemål

Administration-udfordringer:
  → 300 individuelle varmeafregninger pr. år
  → 15 × fjernvarmefakturaer + OCR-scanning
  → 15 × årsafregningsperioder (kan afvige)
  → Varierende kommuner → varierende huslejenævn

Platform-løsning:
  → Portefølje-dashboard: Overblik over alle 15 ejendomme
  → Batch-generering: Generer alle afregninger for én periode
  → Alarmcentral: Konsolideret alarm-feed på tværs af portefølje
  → Deadline-kalender: Alle frister for alle ejendomme i én visning

Intern kontrol: 4-øjne princip

# Platform understøtter 4-øjne princip via roller:

# Workflow: Udlejer (landlord) genererer → Revisor (external_admin) godkender

# Trin 1: Landlord genererer settlement-udkast:
@router.post("/settlements/generate")
async def generate_settlement(
    body: GenerateSettlementIn,
    user: TokenPayload = Depends(require_role("landlord")),
    session: AsyncSession = Depends(get_session),
):
    draft = await _generate_draft(session, body, user.tenant_id)
    # Status: "draft" — ikke sendt endnu
    return draft

# Trin 2: External admin reviewer og godkender:
@router.post("/settlements/{id}/approve")
async def approve_settlement(
    settlement_id: UUID,
    user: TokenPayload = Depends(require_role("external_admin", "super_admin")),
    session: AsyncSession = Depends(get_session),
):
    settlement = await _get_settlement(session, settlement_id)
    settlement.status = "approved"
    settlement.approved_by = user.sub
    settlement.approved_at = datetime.now(timezone.utc)
    await session.commit()

    # Audit log:
    await _log_audit(session, "settlement_approved", {
        "settlement_id": str(settlement_id),
        "approved_by": user.sub,
    })

# Trin 3: Landlord sender (kun efter godkendelse):
@router.post("/settlements/{id}/send")
async def send_settlement(
    settlement_id: UUID,
    user: TokenPayload = Depends(require_role("landlord")),
    session: AsyncSession = Depends(get_session),
):
    settlement = await _get_settlement(session, settlement_id)
    if settlement.status != "approved":
        raise HTTPException(400, "Afregning skal godkendes inden afsendelse")
    # ... send email

Revision og dokumentation

Revisor-venlig platform-eksport:

1. CSV-eksport af alle aflæsninger:
   GET /api/v1/export/readings?property_id=...&period_start=...&period_end=...
   Indeholder: Tidsstempel, måler-ID, driver, HCA-værdi, status

2. Settlement-oversigt:
   GET /api/v1/export/settlements?year=2025
   Indeholder: Lejlighed, lejer, periode, á conto, afregning, tillæg/tilbagebetaling

3. Audit log:
   GET /api/v1/audit-log?tenant_id=...&from=...&to=...
   Append-only log — kan ikke manipuleres

4. OIOUBL XML pr. afregning:
   GET /api/v1/settlements/{id}/oioubl
   Til ERP-integration (e-conomic, Business Central)

Revisorens tjekliste:
  □ AnnualInput dokumenteret (fjernvarmefaktura vedhæftet)
  □ 30/70-fordeling korrekt
  □ Pro-rata beregning verificeret for ind/fraflyttede
  □ Afregning udsendt inden 4-måneder-frist
  □ Klagevejledning inkluderet i PDF
  □ HCA-aflæsninger specificeret pr. lejlighed

ERP-integration

# Platform webhook til e-conomic / Business Central:

@router.post("/webhooks/settlement-sent")
async def settlement_sent_webhook(payload: WebhookPayload):
    """
    Sendes til udlejerens ERP-system når afregning er sendt.
    Bruges til automatisk bogføring.
    """
    # payload indeholder:
    # settlement_id, property_id, unit_id, tenant_name,
    # amount, period_start, period_end, sent_at

async def post_to_economic(settlement: Settlement) -> None:
    """Opret debitorpost i e-conomic ved tillægsbetaling."""
    if settlement.amount_due <= 0:
        return  # Tilbagebetaling — kreditnota i stedet

    payload = {
        "debtor": {"debtorNumber": settlement.tenant_economic_id},
        "date": datetime.now().strftime("%Y-%m-%d"),
        "currency": "DKK",
        "paymentTerms": {"paymentTermsNumber": 14},  # 14 dages betalingsfrist
        "lines": [{
            "lineNumber": 1,
            "product": {"productNumber": "VARME-2025"},
            "description": f"Varmeregnskab {settlement.period_start}–{settlement.period_end}",
            "quantity": 1,
            "unitNetPrice": settlement.amount_due,
        }],
    }
    await httpx.post(
        "https://restapi.e-conomic.com/invoices/drafts",
        json=payload,
        headers={"X-AgreementGrantToken": ECONOMIC_TOKEN},
    )

Portefølje-rapportering til bestyrelse

Månedlig portefølje-rapport (platform auto-genererer):

Selskab: Holdingselskabet A/S
Periode: April 2026

Ejendomme:          15
Lejligheder:        300
Aktive lejemål:     291 (97%)
Tom i april:          9 (3%)

Varmeregnskab status:
  Afregnet 2025 (periode juni–maj):  14/15 ejendomme (93%)
  Udestående:                         Nørrebrogade 15 (AnnualInput mangler)
  Næste frist:                        30. september 2026

Gateway status:
  Online (seneste 24t):              14/15 (93%)
  Offline:                           Roskildevej 28 (siden 22. april)
  Stille målere (> 72t):             3 installationer

Økonomi (estimat):
  Á conto modtaget april:       387.000 DKK
  Forventet varmeomkostning:    412.000 DKK
  Estimeret underdækning:        25.000 DKK (6,4%)
  Anbefaling: Overvej á conto-forhøjelse på 8-10 ejendomme

Alarmer:
  CRITICAL: 2 (MID-udløb Nørrebro gade 8, offline gateway)
  WARNING:  7 (stille målere, lav batteri)

Konklusion

Selskabsudlejere med mange ejendomme kræver systematisering: batch-generering af afregninger, 4-øjne godkendelsesflow, revisionsvenlig CSV/OIOUBL-eksport og ERP-integration. Platformen håndterer alt dette under ét API — monthly digest email giver bestyrelse månedlig status. Multi-tenant isolation sikrer at data aldrig blandes på tværs af kundeforhold.

Se ejendomsadministration digital guide eller CSV-eksport guide.