Files
baudoc-baustellenverwaltung/docs/konzept.html
T
duffyduckandClaude Opus 5 807b7ce541 BauDoc Bahn: Baustellen- und Dokumentenverwaltung für EIU-Projekte
Erstimport. Fachliche Grundlage ist die EIU-Ablagestruktur des Auftraggebers
(2-EIU-Ablagestruktur.xlsx): 1.106 Zeilen, aufbereitet zu 159 Ordnern und
944 Soll-Unterlagen mit Fachbereichsrelevanz, Aufbewahrungsfrist, Medium und
Übergabezeitpunkt.

Module
- Dokumentationsstand: Soll-Ist je Projekt, Fristen aus dem Übergabezeitpunkt
  und den Projektterminen, Ampel, CSV-Rückexport im Format der Ursprungsdatei
- Dokumentenmanagement mit Versionen, Freigabelauf, SHA-256-Prüfsummen
- Bautagebuch nach Ril 809.0301, nach Abschluss gesperrt
- Meldungen und Mängel (Behinderung, Bedenken, Mangel, AvL, Unfall)
- Verträge, Nachträge, Aufmaße, Stundenlohnzettel mit zeilenweiser Anerkennung
- Rechnungsprüfung: automatischer Abgleich gegen Vertrag, anerkanntes Aufmaß,
  bestätigte Stundenzettel und Vorrechnungen; getrennte Bescheinigung
  sachlich richtig / rechnerisch richtig / Zahlungsfreigabe
- Kommunikation mit Projektkanälen, Erwähnungen und E-Mail-Benachrichtigung
- Revisionssicheres Protokoll aller Vorgänge

Rechte
Rollen nach dem Vorgabeprozess Bauüberwachung (PL, BHV, BÜB, FBÜ,
kaufmännische Steuerung, Planung, Auftragnehmer, Prüfer, Betreiber), Zuordnung
je Projekt. Auftragnehmer sehen ausschließlich Daten der eigenen Firma; diese
Schranke hängt allein an der Rolle. Welche Bereiche ihnen überhaupt angezeigt
werden, entscheidet der Bauherr je Projekt über Schalter in den Einstellungen.

Betrieb
Docker Compose mit Anwendung, PostgreSQL und Mailpit. Keine Named Volumes –
alle persistenten Daten liegen als Bind-Mount unter data/ im Compose-
Verzeichnis, damit ein Backup ein Kopiervorgang bleibt.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-11 13:05:09 +02:00

866 lines
32 KiB
HTML
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.
<title>BauDoc Bahn Lösungskonzept</title>
<style>
/* ═══ Tokens: helle Fassung vollständig auf :root ═══════════════════ */
:root {
--papier: #F3F5F2; /* Planpapier, leicht kühl */
--blatt: #FFFFFF;
--blatt-tief: #EAEDE8;
--tinte: #141D1B; /* Zeichentusche, Grünstich */
--tinte-weich: #4C5B57;
--tinte-fein: #77857F;
--hairline: #CFD6CF;
--hairline-st: #A9B4AD;
--akzent: #106B5B; /* Kupfergrün, oxidierter Fahrdraht */
--akzent-flor: #106B5B14;
--kritisch: #A8322A; /* Hp 0 */
--kritisch-fl: #A8322A12;
--warnung: #9A6100;
--warnung-fl: #9A610012;
--gut: #2A6B45;
--gut-fl: #2A6B4512;
--raster: #106B5B0E;
--sans: "Helvetica Neue", Helvetica, Arial, system-ui, sans-serif;
--serif: Charter, "Iowan Old Style", Georgia, "Times New Roman", serif;
--mono: ui-monospace, "SF Mono", SFMono-Regular, Menlo, Consolas, "Liberation Mono", monospace;
}
@media (prefers-color-scheme: dark) {
:root:not([data-theme="light"]) {
--papier: #0D1412;
--blatt: #141D1A;
--blatt-tief: #1B2622;
--tinte: #E4EBE7;
--tinte-weich: #A3B0AA;
--tinte-fein: #7B8A84;
--hairline: #26332E;
--hairline-st: #3A4A44;
--akzent: #4FC0A6;
--akzent-flor: #4FC0A61A;
--kritisch: #E8756A;
--kritisch-fl: #E8756A18;
--warnung: #D9A020;
--warnung-fl: #D9A02018;
--gut: #5FBF87;
--gut-fl: #5FBF8718;
--raster: #4FC0A60F;
}
}
:root[data-theme="dark"] {
--papier: #0D1412;
--blatt: #141D1A;
--blatt-tief: #1B2622;
--tinte: #E4EBE7;
--tinte-weich: #A3B0AA;
--tinte-fein: #7B8A84;
--hairline: #26332E;
--hairline-st: #3A4A44;
--akzent: #4FC0A6;
--akzent-flor: #4FC0A61A;
--kritisch: #E8756A;
--kritisch-fl: #E8756A18;
--warnung: #D9A020;
--warnung-fl: #D9A02018;
--gut: #5FBF87;
--gut-fl: #5FBF8718;
--raster: #4FC0A60F;
}
* { box-sizing: border-box; }
body {
margin: 0;
background: var(--papier);
color: var(--tinte);
font-family: var(--sans);
font-size: 16px;
line-height: 1.65;
-webkit-font-smoothing: antialiased;
}
.blatt {
max-width: 1180px;
margin: 0 auto;
padding: 0 clamp(18px, 4vw, 56px) 96px;
}
/* ═══ Kopf: Planschriftfeld ════════════════════════════════════════ */
.kopf {
position: relative;
border-bottom: 1px solid var(--hairline-st);
padding: clamp(40px, 7vw, 84px) 0 34px;
overflow: hidden;
}
.kopf::before {
content: "";
position: absolute;
inset: 0;
background-image:
linear-gradient(var(--raster) 1px, transparent 1px),
linear-gradient(90deg, var(--raster) 1px, transparent 1px);
background-size: 32px 32px;
mask-image: linear-gradient(to bottom, #000 0%, transparent 78%);
-webkit-mask-image: linear-gradient(to bottom, #000 0%, transparent 78%);
pointer-events: none;
}
.kopf > * { position: relative; }
.marke {
font-family: var(--mono);
font-size: 11px;
letter-spacing: 0.18em;
text-transform: uppercase;
color: var(--akzent);
display: flex;
flex-wrap: wrap;
gap: 6px 22px;
margin-bottom: clamp(24px, 5vw, 46px);
}
.marke span:not(:first-child) { color: var(--tinte-fein); }
h1 {
font-size: clamp(34px, 6.2vw, 66px);
line-height: 1.02;
letter-spacing: -0.028em;
font-weight: 700;
margin: 0 0 22px;
max-width: 17ch;
text-wrap: balance;
}
.these {
font-family: var(--serif);
font-size: clamp(17px, 2.1vw, 22px);
line-height: 1.5;
color: var(--tinte-weich);
max-width: 60ch;
margin: 0;
}
.these b { color: var(--tinte); font-weight: 600; }
/* Schriftfeld unten im Kopf */
.schriftfeld {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
border: 1px solid var(--hairline);
margin-top: clamp(30px, 5vw, 52px);
background: var(--blatt);
}
.schriftfeld > div {
padding: 12px 16px;
border-right: 1px solid var(--hairline);
}
.schriftfeld > div:last-child { border-right: 0; }
.schriftfeld dt {
font-family: var(--mono);
font-size: 10px;
letter-spacing: 0.14em;
text-transform: uppercase;
color: var(--tinte-fein);
margin-bottom: 4px;
}
.schriftfeld dd {
margin: 0;
font-size: 15px;
font-weight: 600;
font-variant-numeric: tabular-nums;
}
/* ═══ Abschnitte mit Gliederungsspalte ═════════════════════════════ */
section {
display: grid;
grid-template-columns: 108px minmax(0, 1fr);
gap: 0 34px;
padding: clamp(38px, 6vw, 66px) 0;
border-bottom: 1px solid var(--hairline);
}
@media (max-width: 720px) {
section { grid-template-columns: 1fr; gap: 14px; }
}
.gliederung {
font-family: var(--mono);
font-size: 12px;
letter-spacing: 0.06em;
color: var(--akzent);
padding-top: 8px;
border-top: 2px solid var(--akzent);
align-self: start;
}
.gliederung small {
display: block;
color: var(--tinte-fein);
letter-spacing: 0.12em;
text-transform: uppercase;
font-size: 10px;
margin-top: 5px;
}
h2 {
font-size: clamp(23px, 3vw, 31px);
line-height: 1.16;
letter-spacing: -0.018em;
font-weight: 700;
margin: 0 0 18px;
max-width: 24ch;
text-wrap: balance;
}
h3 {
font-size: 16px;
letter-spacing: -0.005em;
font-weight: 700;
margin: 30px 0 8px;
}
p { margin: 0 0 15px; max-width: 68ch; }
.inhalt > p:last-child { margin-bottom: 0; }
strong { font-weight: 650; }
a { color: var(--akzent); text-decoration-thickness: 1px; text-underline-offset: 2px; }
a:focus-visible, button:focus-visible {
outline: 2px solid var(--akzent);
outline-offset: 2px;
}
code {
font-family: var(--mono);
font-size: 0.86em;
background: var(--blatt-tief);
padding: 1px 5px;
border-radius: 2px;
}
/* ═══ Kennzahlen ═══════════════════════════════════════════════════ */
.kennzahlen {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(158px, 1fr));
gap: 1px;
background: var(--hairline);
border: 1px solid var(--hairline);
margin: 26px 0;
}
.kennzahlen > div { background: var(--blatt); padding: 16px 18px; }
.kennzahlen .zahl {
font-size: 28px;
font-weight: 700;
letter-spacing: -0.03em;
font-variant-numeric: tabular-nums;
line-height: 1.1;
}
.kennzahlen .bez {
font-family: var(--mono);
font-size: 10px;
letter-spacing: 0.13em;
text-transform: uppercase;
color: var(--tinte-fein);
margin-top: 7px;
}
/* ═══ Tabellen ═════════════════════════════════════════════════════ */
.scroller { overflow-x: auto; margin: 24px 0; border: 1px solid var(--hairline); background: var(--blatt); }
table { border-collapse: collapse; width: 100%; min-width: 560px; font-size: 14px; }
th {
font-family: var(--mono);
font-size: 10px;
letter-spacing: 0.12em;
text-transform: uppercase;
color: var(--tinte-fein);
text-align: left;
font-weight: 500;
padding: 11px 14px;
border-bottom: 1px solid var(--hairline-st);
white-space: nowrap;
}
td {
padding: 11px 14px;
border-bottom: 1px solid var(--hairline);
vertical-align: top;
}
tbody tr:last-child td { border-bottom: 0; }
.num { text-align: right; font-variant-numeric: tabular-nums; white-space: nowrap; }
.oz { font-family: var(--mono); font-size: 12px; color: var(--tinte-fein); white-space: nowrap; }
tfoot td {
border-top: 2px solid var(--hairline-st);
font-weight: 700;
background: var(--blatt-tief);
}
/* ═══ Marken ═══════════════════════════════════════════════════════ */
.marker {
display: inline-block;
font-family: var(--mono);
font-size: 10px;
letter-spacing: 0.08em;
text-transform: uppercase;
padding: 2px 7px;
border: 1px solid currentColor;
border-radius: 2px;
white-space: nowrap;
}
.m-krit { color: var(--kritisch); background: var(--kritisch-fl); }
.m-warn { color: var(--warnung); background: var(--warnung-fl); }
.m-gut { color: var(--gut); background: var(--gut-fl); }
/* ═══ Belegkette ═══════════════════════════════════════════════════ */
.kette {
display: grid;
gap: 1px;
background: var(--hairline);
border: 1px solid var(--hairline);
margin: 26px 0;
}
.stufe {
background: var(--blatt);
display: grid;
grid-template-columns: 44px minmax(0, 1fr);
gap: 18px;
padding: 16px 18px;
align-items: start;
}
.stufe .nr {
font-family: var(--mono);
font-size: 12px;
font-weight: 600;
color: var(--akzent);
border: 1px solid var(--akzent);
border-radius: 50%;
width: 30px;
height: 30px;
display: grid;
place-items: center;
}
.stufe h4 { margin: 4px 0 4px; font-size: 15px; font-weight: 700; }
.stufe p { margin: 0; font-size: 14px; color: var(--tinte-weich); max-width: 62ch; }
.stufe .rolle {
font-family: var(--mono);
font-size: 10px;
letter-spacing: 0.12em;
text-transform: uppercase;
color: var(--tinte-fein);
margin-top: 6px;
display: block;
}
/* ═══ Modulliste ═══════════════════════════════════════════════════ */
.module {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(268px, 1fr));
gap: 1px;
background: var(--hairline);
border: 1px solid var(--hairline);
margin: 26px 0;
}
.modul { background: var(--blatt); padding: 18px 20px; }
.modul .quelle {
font-family: var(--mono);
font-size: 10px;
letter-spacing: 0.12em;
text-transform: uppercase;
color: var(--akzent);
display: block;
margin-bottom: 7px;
}
.modul h4 { margin: 0 0 7px; font-size: 16px; font-weight: 700; }
.modul p { margin: 0; font-size: 14px; line-height: 1.55; color: var(--tinte-weich); }
/* ═══ Merksatz ═════════════════════════════════════════════════════ */
.merksatz {
border-left: 2px solid var(--akzent);
background: var(--akzent-flor);
padding: 20px 24px;
margin: 28px 0;
font-family: var(--serif);
font-size: clamp(17px, 2vw, 20px);
line-height: 1.45;
max-width: 56ch;
}
/* ═══ Fragenliste ══════════════════════════════════════════════════ */
ol.fragen { margin: 22px 0 0; padding: 0; list-style: none; counter-reset: f; }
ol.fragen li {
counter-increment: f;
display: grid;
grid-template-columns: 40px minmax(0, 1fr);
gap: 16px;
padding: 14px 0;
border-top: 1px solid var(--hairline);
max-width: 74ch;
}
ol.fragen li::before {
content: "F" counter(f, decimal-leading-zero);
font-family: var(--mono);
font-size: 11px;
color: var(--akzent);
padding-top: 4px;
}
ol.fragen strong { display: block; margin-bottom: 2px; }
ol.fragen span { font-size: 14px; color: var(--tinte-weich); }
ul.strich { margin: 14px 0; padding: 0; list-style: none; }
ul.strich li {
padding: 6px 0 6px 20px;
position: relative;
max-width: 68ch;
font-size: 15px;
}
ul.strich li::before {
content: "";
position: absolute;
left: 0; top: 15px;
width: 10px; height: 1px;
background: var(--hairline-st);
}
footer {
padding: 34px 0 0;
font-family: var(--mono);
font-size: 11px;
letter-spacing: 0.08em;
text-transform: uppercase;
color: var(--tinte-fein);
display: flex;
flex-wrap: wrap;
gap: 8px 28px;
}
@media (prefers-reduced-motion: reduce) {
* { animation: none !important; transition: none !important; }
}
</style>
<div class="blatt">
<header class="kopf">
<div class="marke">
<span>BauDoc Bahn</span>
<span>Lösungskonzept</span>
<span>Stand 09.08.2026</span>
<span>Fassung 1</span>
</div>
<h1>Aus einer Prüfliste wird ein Bauprojekt&shy;management.</h1>
<p class="these">
Übergeben wurde eine Tabelle: die <b>EIU-Ablagestruktur</b> mit 1.106 Zeilen.
Was zunächst wie eine Anlage aussieht, ist tatsächlich die vollständige Spezifikation
dessen, was in einem Infrastrukturprojekt entstehen, geprüft, übergeben und aufbewahrt
werden muss. Genau darauf ist dieses System gebaut — und um die Rechnungsprüfung
ergänzt, die daraus ohnehin folgt.
</p>
<dl class="schriftfeld">
<div><dt>Ordner im Katalog</dt><dd>159</dd></div>
<div><dt>Soll-Unterlagen</dt><dd>944</dd></div>
<div><dt>Akten</dt><dd>P · B · K</dd></div>
<div><dt>Zustand</dt><dd>lauffähig</dd></div>
</dl>
</header>
<!-- ═══════════════════════════════════════════════════════════ -->
<section>
<div class="gliederung">0<small>Ausgangslage</small></div>
<div class="inhalt">
<h2>Was in der übergebenen Tabelle tatsächlich steht</h2>
<p>
Die Datei ist keine Ordnerliste. Jede der 944 Soll-Unterlagen trägt fünf Angaben,
die zusammen einen vollständigen Steuerungsdatensatz ergeben — und die in einer
Tabelle nicht arbeiten können, weil niemand sie fortschreibt.
</p>
<ul class="strich">
<li><strong>Gliederung</strong> — dreistufige Aktenstruktur: Planungsakte (P), Baudokumentation mit Bau- und Betreiberakte (B.I / B.II), Kaufmännische Akte (K).</li>
<li><strong>Fachbereichsrelevanz</strong> — 16 Spalten, getrennt nach Fahrweg und Personenbahnhöfen. Damit lässt sich der Katalog auf ein konkretes Projekt zusammenschneiden.</li>
<li><strong>Übergabezeitpunkt</strong> — zur Inbetriebnahme, drei bzw. sechs Monate danach, sechs Monate nach Bauende, zum Projektabschluss. Das ist eine Frist, sobald Projekttermine bekannt sind.</li>
<li><strong>Aufbewahrung</strong> — Nutzungsdauer der Anlage oder Jahre nach Bauschlussmeldung.</li>
<li><strong>Medium und Regelwerksbezug</strong> — Papierakte, digital, Mikrofiche; dazu die einschlägige Richtlinie oder Verwaltungsvorschrift.</li>
</ul>
<div class="merksatz">
Die Tabelle beantwortet die Frage „Was fehlt noch?“ nur zu dem Zeitpunkt,
an dem jemand sie von Hand gepflegt hat. Das System beantwortet sie jederzeit
— je Projekt, je Fachbereich, je Verantwortlichem, mit Frist.
</div>
<p>
Für die mitgelieferte Beispielmaßnahme — sechs Fachbereiche, Fahrweg — bleiben von
944 Positionen <strong>675 einschlägige</strong> übrig. Die übrigen 269 werden nicht
ausgeblendet, sondern begründet als nicht zutreffend geführt. Das ist der Unterschied
zwischen „haben wir vergessen“ und „haben wir bewusst nicht“.
</p>
</div>
</section>
<!-- ═══════════════════════════════════════════════════════════ -->
<section>
<div class="gliederung">1<small>Kern</small></div>
<div class="inhalt">
<h2>Der Dokumentationsstand als Cockpit</h2>
<p>
Beim Anlegen eines Projekts werden Fachbereiche und Termine hinterlegt. Daraus erzeugt
das System den projektspezifischen Soll-Katalog und rechnet jeden Übergabezeitpunkt in
ein Datum um — es gilt jeweils die früheste erreichbare Frist, damit sich nicht alles
vor dem Projektabschluss staut.
</p>
<p>
Danach zeigt eine Ansicht, was die Excel nie zeigen konnte: Erfüllungsgrad je Akte,
überfällige Positionen, wer zuständig ist, und welche Datei zu welcher Sollposition
gehört. Der Export in die ursprüngliche Spaltenlogik bleibt möglich — wer die Liste
weiterhin als Tabelle braucht, bekommt sie auf Knopfdruck.
</p>
<div class="kennzahlen">
<div><div class="zahl">675</div><div class="bez">Sollpositionen im Beispiel</div></div>
<div><div class="zahl">3</div><div class="bez">Akten mit eigener Quote</div></div>
<div><div class="zahl">6</div><div class="bez">Fristanker aus den Terminen</div></div>
<div><div class="zahl">1</div><div class="bez">Klick zum CSV-Rückexport</div></div>
</div>
</div>
</section>
<!-- ═══════════════════════════════════════════════════════════ -->
<section>
<div class="gliederung">2<small>Umfang</small></div>
<div class="inhalt">
<h2>Module — und woher sie kommen</h2>
<p>
Kein Modul ist erfunden. Jedes bildet etwas ab, das in der Ablagestruktur als
aufzubewahrende Unterlage benannt ist oder im Vorgabeprozess Bauüberwachung als
Pflicht der Bauüberwachung steht.
</p>
<div class="module">
<div class="modul">
<span class="quelle">Ablage B · K</span>
<h4>Dokumentenmanagement</h4>
<p>Versionen, Prüf- und Freigabelauf, Vertraulichkeitsstufen, Suche über Metadaten und Schlagworte. Jede Datei mit SHA-256-Prüfsumme, jeder Abruf protokolliert.</p>
</div>
<div class="modul">
<span class="quelle">B.I 2.2 · Ril 809.0301</span>
<h4>Bautagebuch</h4>
<p>Wetter, Arbeitszeit, Betra und Sperrpause, Personal- und Gerätestunden, besondere Vorkommnisse. Nach Abschluss gesperrt — Änderungen nur als Nachtrag.</p>
</div>
<div class="modul">
<span class="quelle">B.I 2.5</span>
<h4>Meldungen und Mängel</h4>
<p>Behinderungs-, Bedenken- und Mängelanzeige, Mehrkosten und Anordnung von Leistungen, Unfall- und Sofortmeldung — mit Frist, Zuständigkeit und Verlauf.</p>
</div>
<div class="modul">
<span class="quelle">K 1 · K 2</span>
<h4>Verträge und Nachträge</h4>
<p>Leistungsverzeichnis, Nachtragsstatus mit Stellungnahme der Bauüberwachung, Auftragsvolumen inklusive beauftragter Nachträge.</p>
</div>
<div class="modul">
<span class="quelle">K 3.3 · K 3.4</span>
<h4>Aufmaß und Stundenzettel</h4>
<p>Der Auftragnehmer reicht ein, die Bauüberwachung erkennt zeilenweise an. Diese anerkannte Menge ist die verbindliche Obergrenze für alles Folgende.</p>
</div>
<div class="modul">
<span class="quelle">K 3</span>
<h4>Rechnungsprüfung</h4>
<p>Automatischer Abgleich gegen Vertrag, Aufmaß, Stundenzettel und Vorrechnungen. Getrennte Bescheinigung sachlich und rechnerisch richtig.</p>
</div>
<div class="modul">
<span class="quelle">B.I 2.4</span>
<h4>Kommunikation</h4>
<p>Projektkanäle statt E-Mail-Verteiler. Erwähnungen benachrichtigen gezielt; wer weiterhin per E-Mail arbeiten möchte, stellt das im Profil ein.</p>
</div>
<div class="modul">
<span class="quelle">B.I 0 · Vorgabeprozess</span>
<h4>Beteiligte und Rechte</h4>
<p>Rollen nach dem Vorgabeprozess: PL, BHV, BÜB, FBÜ, kaufmännische Steuerung, Planung, Auftragnehmer, Prüfer, Betreiber.</p>
</div>
</div>
</div>
</section>
<!-- ═══════════════════════════════════════════════════════════ -->
<section>
<div class="gliederung">3<small>Kernfall</small></div>
<div class="inhalt">
<h2>Rechnungsprüfung: eine echte Abschlagsrechnung, durchgerechnet</h2>
<p>
Der Wunsch war, Rechnungen der Baufirmen gegen die Stundenzettel zu halten. Das ist
möglich — und es lohnt sich, an derselben Stelle auch die Mengen mitzuprüfen, weil die
Belege dafür ohnehin im System liegen.
</p>
<h3>Die Belegkette</h3>
<div class="kette">
<div class="stufe">
<div class="nr">1</div>
<div>
<h4>Leistung wird belegt</h4>
<p>Der Auftragnehmer reicht Aufmaß oder Stundenlohnzettel ein. Aus dem Bautagebuch ist unabhängig davon bekannt, wer an dem Tag mit wie vielen Leuten und Geräten vor Ort war.</p>
<span class="rolle">Auftragnehmer</span>
</div>
</div>
<div class="stufe">
<div class="nr">2</div>
<div>
<h4>Beleg wird zeilenweise anerkannt</h4>
<p>Die Bauüberwachung trägt je Zeile die anerkannte Menge oder Stundenzahl ein, mit Prüfvermerk. Beispiel aus der Demo: gemeldet 9 Stunden je Mann, anerkannt 7 — An- und Abfahrt sind mit den Einheitspreisen abgegolten.</p>
<span class="rolle">Bauüberwacher Bahn</span>
</div>
</div>
<div class="stufe">
<div class="nr">3</div>
<div>
<h4>Rechnung wird automatisch abgeglichen</h4>
<p>Jede Position gegen Vertragspreis, anerkanntes Aufmaß, bestätigten Zettel, beauftragten Nachtrag und bereits abgerechnete Mengen. Ergebnis ist ein Prüfbericht mit vorgeschlagener Kürzung.</p>
<span class="rolle">System</span>
</div>
</div>
<div class="stufe">
<div class="nr">4</div>
<div>
<h4>Zwei Personen entscheiden</h4>
<p>Sachlich richtig durch die Bauüberwachung, rechnerisch richtig durch die kaufmännische Steuerung, danach die Zahlungsfreigabe. Beide Bescheinigungen sind technisch nicht durch dieselbe Person möglich.</p>
<span class="rolle">BÜB → Kaufmännische Steuerung → PL / BHV</span>
</div>
</div>
</div>
<h3>Prüfbericht zur Rechnung 2026-AR-0431</h3>
<p>
Abschlagsrechnung der Nordbahn Gleisbau GmbH über 2.166.283,00 EUR netto. Die
Rechnung ist absichtlich mit den Fehlern versehen, die in der Praxis vorkommen —
das System findet sie ohne Zutun.
</p>
<div class="scroller">
<table>
<thead>
<tr>
<th>Pos.</th>
<th>OZ / Beleg</th>
<th>Befund</th>
<th>Beleg sagt</th>
<th>Rechnung sagt</th>
<th class="num">Differenz</th>
</tr>
</thead>
<tbody>
<tr>
<td class="oz">3</td>
<td class="oz">01.01.0020</td>
<td><span class="marker m-krit">Preisabweichung</span><br>Einheitspreis über Vertrag</td>
<td class="num">24,90 EUR/m²</td>
<td class="num">26,40 EUR/m²</td>
<td class="num">12.690,00</td>
</tr>
<tr>
<td class="oz">4</td>
<td class="oz">01.02.0040</td>
<td><span class="marker m-krit">Menge über Aufmaß</span><br>drei Weichen abgerechnet, zwei anerkannt</td>
<td class="num">2 St</td>
<td class="num">3 St</td>
<td class="num">148.500,00</td>
</tr>
<tr>
<td class="oz">5</td>
<td class="oz">02.01.0030</td>
<td><span class="marker m-krit">Menge ohne Aufmaß</span><br>Überbau liegt noch auf dem Lagerplatz</td>
<td class="num">0 psch</td>
<td class="num">1 psch</td>
<td class="num">384.000,00</td>
</tr>
<tr>
<td class="oz">7</td>
<td class="oz">SLZ-2026-091</td>
<td><span class="marker m-krit">Stunden über Zettel</span><br>gemeldete statt anerkannter Stunden</td>
<td class="num">21,00 Std.</td>
<td class="num">25,00 Std.</td>
<td class="num">313,60</td>
</tr>
<tr>
<td class="oz">7</td>
<td class="oz">SLZ-2026-091</td>
<td><span class="marker m-warn">Stundensatz weicht ab</span><br>zur Klärung, nicht zur Kürzung</td>
<td class="num">92,75 EUR/Std.</td>
<td class="num">78,40 EUR/Std.</td>
<td class="num"></td>
</tr>
<tr>
<td class="oz">8</td>
<td class="oz">SLZ-2026-097</td>
<td><span class="marker m-krit">Zettel nicht bestätigt</span><br>noch nicht durch die Bauüberwachung geprüft</td>
<td class="num">eingereicht</td>
<td class="num">abgerechnet</td>
<td class="num">627,00</td>
</tr>
<tr>
<td class="oz">10</td>
<td class="oz">03.01.0010</td>
<td><span class="marker m-krit">Menge über Aufmaß</span><br>Kabeltrog nur teilweise anerkannt</td>
<td class="num">1.650 m</td>
<td class="num">1.800 m</td>
<td class="num">9.360,00</td>
</tr>
</tbody>
<tfoot>
<tr>
<td colspan="5">Vorgeschlagene Kürzung netto — anerkannt 1.610.792,40 EUR</td>
<td class="num">555.490,60</td>
</tr>
</tfoot>
</table>
</div>
<p>
Position 9 — die Nachtragsleistung Bodenaustausch über 186.400 EUR — wird
<span class="marker m-gut">ohne Befund</span> durchgelassen, weil der Nachtrag N-01
geprüft und beauftragt ist. Das ist ebenso wichtig wie das Finden von Fehlern: Wer
alles beanstandet, wird nicht mehr gelesen.
</p>
<h3>Was sonst noch geprüft wird</h3>
<ul class="strich">
<li>Doppelabrechnung desselben Stundenlohnzettels über mehrere Rechnungen hinweg</li>
<li>Nachtragsleistung ohne beauftragten Nachtrag</li>
<li>Zuschlag in der Rechnung, der auf dem Zettel nicht vermerkt ist</li>
<li>Rechenfehler in Zeile, Umsatzsteuer und Bruttobetrag</li>
<li>kumulierte Abrechnung über der Auftragssumme einschließlich Nachträge</li>
<li>Hinweis bei Mengenmehrung über 110 Prozent — Preisanpassung nach § 2 Abs. 3 VOB/B prüfen</li>
</ul>
<div class="merksatz">
Das System entscheidet nichts. Es legt die Belege nebeneinander und benennt jede
Abweichung mit Betrag. Die Bescheinigung bleibt eine persönliche Erklärung —
auch die bewusste Freigabe trotz Befund, die mit Begründung protokolliert wird.
</div>
</div>
</section>
<!-- ═══════════════════════════════════════════════════════════ -->
<section>
<div class="gliederung">4<small>Rechte</small></div>
<div class="inhalt">
<h2>Wer darf was</h2>
<p>
Rollen werden je Projekt vergeben, bei Fachbauüberwachern zusätzlich je Fachbereich.
Auftragnehmer sehen ausschließlich eigene Verträge, Stunden, Aufmaße und Rechnungen
sowie freigegebene, nicht als intern gekennzeichnete Unterlagen.
</p>
<div class="scroller">
<table>
<thead>
<tr>
<th>Rolle</th>
<th>Dokumente freigeben</th>
<th>Bautagebuch</th>
<th>Stunden prüfen</th>
<th>Sachlich richtig</th>
<th>Rechnerisch richtig</th>
<th>Zahlung freigeben</th>
</tr>
</thead>
<tbody>
<tr><td>Projektleitung (PL)</td><td>ja</td><td>gegenzeichnen</td><td></td><td></td><td></td><td>ja</td></tr>
<tr><td>Bauherrenvertretung (BHV)</td><td>ja</td><td>gegenzeichnen</td><td></td><td></td><td></td><td>ja</td></tr>
<tr><td>Bauüberwacher Bahn (BÜB)</td><td>ja</td><td>führen</td><td>ja</td><td>ja</td><td></td><td></td></tr>
<tr><td>Fachbauüberwacher (FBÜ)</td><td>im Fachbereich</td><td>führen</td><td>ja</td><td></td><td></td><td></td></tr>
<tr><td>Kaufmännische Steuerung</td><td></td><td>lesen</td><td></td><td></td><td>ja</td><td></td></tr>
<tr><td>Auftragnehmer</td><td></td><td></td><td>einreichen</td><td></td><td></td><td></td></tr>
</tbody>
</table>
</div>
<p>
Sämtliche Vorgänge landen in einem Protokoll: Anmeldung, Upload, Abruf einer Datei,
Freigabe, Prüflauf, Bescheinigung. Damit ist auch Jahre später nachvollziehbar,
wer wann was erklärt hat.
</p>
</div>
</section>
<!-- ═══════════════════════════════════════════════════════════ -->
<section>
<div class="gliederung">5<small>Betrieb</small></div>
<div class="inhalt">
<h2>Technik, bewusst schmal gehalten</h2>
<p>
Vier bewegliche Teile, keine Fremddienste, keine Cloud-Abhängigkeit. Das ganze System
startet mit einem Befehl und läuft ebenso im eigenen Rechenzentrum wie auf einem
Bauleitungsserver.
</p>
<ul class="strich">
<li><strong>Anwendung</strong> — ein Container, Oberfläche und Server-Logik in einem Prozess</li>
<li><strong>PostgreSQL</strong> — ein Container für die Datenhaltung</li>
<li><strong>E-Mail</strong> — beliebiges SMTP-Relais des Hauses; für den Test ein mitgelieferter Abfangserver</li>
<li><strong>Anmeldung</strong> — im System selbst, ohne zusätzlichen Dienst; Anbindung an das Unternehmensverzeichnis ist nachrüstbar</li>
</ul>
<h3>Dateien bleiben Dateien</h3>
<p>
Alles Persistente liegt als gewöhnliches Verzeichnis neben der Konfiguration —
Datenbank unter <code>data/postgres</code>, Dokumente unter <code>data/files</code>,
abgelegt nach Projektnummer und Jahr. Ein Backup ist ein Archiv über einen Ordner,
ein Umzug ein Kopiervorgang. Die Ablage ist auch dann noch lesbar, wenn die Anwendung
eines Tages nicht mehr läuft — bei einer Aufbewahrungspflicht von bis zu 38 Jahren
nach Bauschlussmeldung ist das keine Nebensache.
</p>
</div>
</section>
<!-- ═══════════════════════════════════════════════════════════ -->
<section>
<div class="gliederung">6<small>Offen</small></div>
<div class="inhalt">
<h2>Was bewusst offen geblieben ist</h2>
<p>
Die folgenden Punkte sind nicht vergessen, sondern absichtlich zurückgestellt: Sie
setzen Entscheidungen voraus, die nur der Auftraggeber treffen kann. Sie sind der
eigentliche Zweck des nächsten Gesprächs.
</p>
<ol class="fragen">
<li>
<strong>Verhältnis zum elektronischen Bautagebuch (eBTB)</strong>
<span>Wird das Bautagebuch hier geführt oder aus dem bestehenden System übernommen? Beides ist möglich, aber es sollte nur eine führende Quelle geben.</span>
</li>
<li>
<strong>Rechnungseingang</strong>
<span>Sollen Rechnungen als X-Rechnung oder ZUGFeRD eingelesen werden statt erfasst? Das ändert nichts an der Prüflogik, spart aber die Erfassung.</span>
</li>
<li>
<strong>Leistungsverzeichnisse</strong>
<span>Liegen die LV als GAEB-Datei vor? Dann entfällt das Anlegen der Positionen von Hand.</span>
</li>
<li>
<strong>Anmeldung</strong>
<span>Eigene Benutzerverwaltung oder Anmeldung über das Unternehmensverzeichnis — und wie kommen externe Baufirmen hinein?</span>
</li>
<li>
<strong>Erfassung vor Ort</strong>
<span>Wird auf der Baustelle mit dem Telefon gearbeitet? Dann sind Fotodokumentation mit Ortsbezug und eine Offline-Erfassung sinnvoll.</span>
</li>
<li>
<strong>Aufbewahrung und Aussonderung</strong>
<span>Was geschieht nach Ablauf der Frist — automatischer Hinweis, Export in ein Archivsystem, oder Löschung nach Freigabe?</span>
</li>
</ol>
<div class="merksatz">
Vorschlag für das nächste Gespräch: nicht über Anforderungen sprechen, sondern
gemeinsam die Beispielrechnung durchgehen. Erfahrungsgemäß fällt dabei innerhalb
von zehn Minuten auf, was im eigenen Haus anders läuft — und genau das ist die
Anforderungsliste.
</div>
</div>
</section>
<footer>
<span>BauDoc Bahn</span>
<span>Lösungskonzept · Fassung 1</span>
<span>Grundlage: 2-EIU-Ablagestruktur.xlsx</span>
<span>Stand 09.08.2026</span>
</footer>
</div>