Aktenzeichen-Muster je Vorlage, Startskript für die Entwicklung

Richtigstellung zuerst: der vorige Commit trägt die Nachricht "Nichts davon
gebaut", enthält aber bereits die Schema-Änderung an CaseTemplate und
CaseCounter. Ein abgebrochener Aufruf hatte die Datei schon geschrieben, und
das nachfolgende `git add -A` hat sie mitgenommen. Die Nachricht war damit
falsch. Hier ist die Änderung vollständig und geprüft.

Das Muster des Aktenzeichens gehört zur Vorlage: Präfix und Stellenzahl je
Fallart, ein Nummernkreis je Präfix und Jahr. Die Abteilung führt gewachsene
Präfixe wie AKT-PA-2026-62843 neben dem AfiS-2026-0042 aus dem Glossar.

Die Migration ist von Hand geschrieben, weil der Wechsel des Primärschlüssels
auf CaseCounter den bestehenden Zähler erhalten muss: eine zurückgesetzte
Nummer wäre ein doppeltes Aktenzeichen. Vorher und nachher geprüft.

parseCaseNumber zerlegt von hinten, damit Präfixe mit Bindestrich funktionieren.
Ein Test belegt, dass AKT-PA und AfiS getrennte Nummernkreise führen.

Dazu start.sh für die lokale Entwicklung, solange der Dockge-Stack nicht läuft:
Datenbank hochfahren, Migrationen, Grundzustand, Worker und Web. Mit
--ohne-worker für Arbeit ohne Discord und --nur-db für die Datenbank allein.
This commit is contained in:
Harlekin
2026-09-02 12:10:34 +02:00
parent ac4aae294c
commit cf4321a3bd
6 changed files with 259 additions and 28 deletions
+27 -7
View File
@@ -36,7 +36,13 @@ const CLEARANCE_LEVELS = [
* mit allen Feldtypen baut Phase 3, hier steht nur, was eine Akte zum Laufen
* braucht.
*/
const TEMPLATES = [
const TEMPLATES: {
key: string
name: string
description: string
numberPrefix?: string
numberPadding?: number
}[] = [
{
key: 'korruptionsverdacht',
name: 'Korruptionsverdacht',
@@ -96,18 +102,32 @@ async function main(): Promise<void> {
for (const template of TEMPLATES) {
await db.caseTemplate.upsert({
where: { key_version: { key: template.key, version: 1 } },
create: { ...template, version: 1, fields: TEMPLATE_FIELDS, isActive: true },
create: {
...template,
numberPrefix: template.numberPrefix ?? 'AfiS',
numberPadding: template.numberPadding ?? 4,
version: 1,
fields: TEMPLATE_FIELDS,
isActive: true,
},
// Muster und Felder bleiben unangetastet: was der Leiter im
// Vorlagen-Editor eingestellt hat, überschreibt der Seed nicht.
update: { name: template.name, description: template.description },
})
}
console.log(`[seed] ${TEMPLATES.length} Startvorlagen`)
// Ein Nummernkreis je Präfix und Jahr. Angelegt wird er beim ersten Fall
// von selbst; hier steht er nur, damit ein frischer Bestand nachvollziehbar
// bei null beginnt.
const year = new Date().getFullYear()
await db.caseCounter.upsert({
where: { year },
create: { year, lastNumber: 0 },
update: {},
})
for (const prefix of [...new Set(TEMPLATES.map((t) => t.numberPrefix ?? 'AfiS'))]) {
await db.caseCounter.upsert({
where: { prefix_year: { prefix, year } },
create: { prefix, year, lastNumber: 0 },
update: {},
})
}
console.log(`[seed] Aktenzeichen-Zähler für ${year}`)
// entry.edit_own, entry.edit_any und entry.retract sind bewusst keiner Rolle