v1.23: Nebenkostenabrechnung als PDF aus Kosten- und Zaehlermodul

This commit is contained in:
2026-10-04 14:38:51 +02:00
parent 7026019ced
commit 9707b6700d
9 changed files with 1258 additions and 16 deletions
+19
View File
@@ -14,6 +14,7 @@ const multer = require('multer')
const { pool, init, sessionsAufraeumen } = require('./db')
const { seed, seedeZaehler, seedeHaeuser, seedeKosten } = require('./seed')
const mail = require('./mail')
const { erzeugeAbrechnung } = require('./abrechnung')
const PORT = Number(process.env.PORT || 3000)
const SESSION_DAUER_MS = 8 * 60 * 60 * 1000
@@ -1364,6 +1365,24 @@ app.post('/api/ki-antwort', async (req, res, next) => {
} catch (e) { next(e) }
})
// ── Nebenkostenabrechnung als PDF (v1.23) ─────────────────────
app.post('/api/abrechnungen', auth, adminOnly, async (req, res, next) => {
try {
const unitId = String((req.body || {}).unitId || '')
const jahr = Number((req.body || {}).jahr)
if (!unitId || !Number.isInteger(jahr) || jahr < 2000 || jahr > 2100)
return res.status(400).json({ fehler: 'Wohnung und gültiges Jahr erforderlich.' })
const { dokument, daten } = await erzeugeAbrechnung(pool, unitId, jahr)
console.log(`[abrechnung] ${dokument.title} erzeugt (${dokument.size})`)
res.json({ dokument: mapDocument(dokument), zusammenfassung: {
summe: daten.summe, vorauszahlung: daten.vorauszahlung, differenz: daten.differenz,
} })
} catch (e) {
if (e.status) return res.status(e.status).json({ fehler: e.message })
next(e)
}
})
// ── Fehlerbehandlung ─────────────────────────────────────────
app.use((err, _req, res, _next) => {
console.error('[api]', err)