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>
866 lines
32 KiB
HTML
866 lines
32 KiB
HTML
<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­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>
|