Centurio System & Module Documentation
🏛️ Platform Architecture 🔑 Login
All Modules / manufacturing_execution / Projekte & Baustellen
📘

Projekte & Baustellen

projects manufacturing_execution 🛡️ RLS Protected

Projekte & Baustellen — aus Code abgeleitete Prozess- und API-Dokumentation.

Fachliche Bestimmung: Projekte, Arbeitsaufträge & Außendienst steuert die operative Dienstleistung und Projektabwicklung: Projektstrukturpläne (PSP) mit Phasen und Meilensteinen nach VOB/B und DIN 69901, Disposition mobiler Techniker, mobile Zeiterfassung und Materialentnahme aus Fahrzeuglagern vor Ort, rechtssichere digitale Abnahmeprotokolle mit Kundensignatur und lückenlose Übergabe an Abschlags-, Teil- und Schlussrechnungen.

⚡ Workflows & Lifecycles

Kundenauftrag → Abwicklung cascade:business.customer_order.fulfill

Kaskade (review_gated).

1. order
Verkaufsauftrag anlegen / bestätigen
sales
Aktionen: sales.create
2. issue
Warenausgang als Entwurf buchen
inventory
Aktionen: stock.issue.create
3. tour
Auslieferungstour einplanen
logistics
Aktionen: create_tour
4. project
Projekt / Kostenstelle zuordnen
projects
Aktionen: link_project
5. task
Auftrag ausführen / abrechnen
tasks
Aktionen: create_task

Auftragsbestätigung prüfen cascade:business.order_confirmation.check

Kaskade (review_gated).

1. match
AB ↔ Bestellung abgleichen
purchasing
Aktionen: order_confirmation.match
2. project
Projekt / Kostenstelle zuordnen
projects
Aktionen: link_project
3. task
Liefertermin / Preise überwachen
tasks
Aktionen: create_task

Eingangsrechnung → Abrechnung cascade:business.supplier_invoice.p2p

Kaskade (review_gated).

1. booking
Buchungssatz erstellen
accounting
Aktionen: accounting.entry
2. project
Projektkosten verbuchen
projects
Aktionen: link_project
3. task
Frist / Skonto überwachen
tasks
Aktionen: create_task

Projekt / Kostenstelle zuordnen cascade_target:business.project.link

Kaskade (review_gated).

1. cascade
Projekt / Kostenstelle zuordnen

Benutzerbefehl: project crud subagent plan:command_project_crud_subagent

Geprüfter Durable-Plan (durable_plan), Start: manual_command.

1. project_crud_subagent
project_crud_subagent
{"key": "execute_command", "label": "Befehl prüfen, ausführen oder zur Freigabe vorlegen", "adapter": "agent.execute", "agent": "project_crud_subagent", "condition_fact": null}
Aktionen: project_crud_subagent

Projekt status:project

Beobachtbare Zustandsmaschine (observable_only). Übergänge hier nicht erzwungen — siehe Service-Validierung.

1. draft
draft
Status «draft» der Zustandsmaschine Projekt.
2. active
active
Status «active» der Zustandsmaschine Projekt.
3. on_hold
on_hold
Status «on_hold» der Zustandsmaschine Projekt.
4. completed
completed
Status «completed» der Zustandsmaschine Projekt.
5. cancelled
cancelled
Status «cancelled» der Zustandsmaschine Projekt.
6. archived
archived
Status «archived» der Zustandsmaschine Projekt.

⚙️ Fachprozesse & Capabilities (System-Fachlogik)

Registrierte Fachoperationen und System-Capabilities dieses Moduls zur Steuerung von Workflows, Kaskaden und KI-Agenten.

Gesamt: 23 manual_entry: 1 engine: 13 reviewed: 1 review_gated: 4 operator_surface: 2 durable_plan: 1 observable_only: 1
Capability & Schlüssel Fachliche Bezeichnung Ausführung / Coverage Risikostufe & Freigabe Effekte & Kaskaden
Agent-Einstieg project_crud_subagent agent_entry:project_crud_subagent
Agent-Einstieg project_crud_subagent
Quelle: code:module_agent_map
manual_entry
✓ Auto
Keine Seiteneffekte deklariert
Cost: create capability:costing.cost.create
Op: costing.cost.create
Objekt: cost
Quelle: code:capability_registry
⚙️ Engine
✓ Auto Risiko: business_record
  • cost.create
Projekt / Kostenstelle zuordnen capability:link_project
Op: link_project
Objekt: project
Quelle: code:capability_registry
reviewed
🔒 Freigabe nötig Risiko: business_record
  • cascade:business.project.link
Budgetwarnung capability:project.budget.alert
Op: project.budget.alert
Objekt: project
Quelle: code:capability_registry
⚙️ Engine
✓ Auto Risiko: business_record
  • project.budget.alert
Projekt anlegen capability:project.create
Op: project.create
Intent: create_project
Quelle: code:capability_registry
⚙️ Engine
✓ Auto Risiko: business_record
  • project.created
Meilenstein capability:project.milestone.complete
Op: project.milestone.complete
Objekt: project
Quelle: code:capability_registry
⚙️ Engine
✓ Auto Risiko: business_record
  • project.milestone.complete
Project: add milestone capability:projects.project.add_milestone
Op: projects.project.add_milestone
Objekt: project
Quelle: code:capability_registry
⚙️ Engine
✓ Auto Risiko: business_record
  • project.add_milestone
Project: book material capability:projects.project.book_material
Op: projects.project.book_material
Objekt: project
Quelle: code:capability_registry
⚙️ Engine
✓ Auto Risiko: business_record
  • project.book_material
Project: create capability:projects.project.create
Op: projects.project.create
Objekt: project
Quelle: code:capability_registry
⚙️ Engine
✓ Auto Risiko: business_record
  • project.create
Project: create subproject capability:projects.project.create_subproject
Op: projects.project.create_subproject
Objekt: project
Quelle: code:capability_registry
⚙️ Engine
✓ Auto Risiko: business_record
  • project.create_subproject
Project: create work order capability:projects.project.create_work_order
Op: projects.project.create_work_order
Objekt: project
Quelle: code:capability_registry
⚙️ Engine
✓ Auto Risiko: business_record
  • project.create_work_order
Project: delete capability:projects.project.delete
Op: projects.project.delete
Objekt: project
Quelle: code:capability_registry
⚙️ Engine
✓ Auto Risiko: business_record
  • project.delete
Project: record work log capability:projects.project.record_work_log
Op: projects.project.record_work_log
Objekt: project
Quelle: code:capability_registry
⚙️ Engine
✓ Auto Risiko: business_record
  • project.record_work_log
Project: set status capability:projects.project.set_status
Op: projects.project.set_status
Objekt: project
Quelle: code:capability_registry
⚙️ Engine
✓ Auto Risiko: business_record
  • project.set_status
Project: update capability:projects.project.update
Op: projects.project.update
Objekt: project
Quelle: code:capability_registry
⚙️ Engine
✓ Auto Risiko: business_record
  • project.update
Kundenauftrag → Abwicklung cascade:business.customer_order.fulfill
Kundenauftrag → Abwicklung
Quelle: code:cascade_process
review_gated
✓ Auto
Keine Seiteneffekte deklariert
Auftragsbestätigung prüfen cascade:business.order_confirmation.check
Auftragsbestätigung prüfen
Quelle: code:cascade_process
review_gated
✓ Auto
Keine Seiteneffekte deklariert
Eingangsrechnung → Abrechnung cascade:business.supplier_invoice.p2p
Eingangsrechnung → Abrechnung
Quelle: code:cascade_process
review_gated
✓ Auto
Keine Seiteneffekte deklariert
Projekt / Kostenstelle zuordnen cascade_target:business.project.link
Op: link_project
Projekt / Kostenstelle zuordnen
Quelle: code:cascade_target
review_gated
🔒 Freigabe nötig
Keine Seiteneffekte deklariert
project: create form form_surface_anchor:project.create
Objekt: project
Quelle: code:erp_form_surface
operator_surface
✓ Auto
Keine Seiteneffekte deklariert
project: edit form form_surface_anchor:project.edit
Objekt: project
Quelle: code:erp_form_surface
operator_surface
✓ Auto
Keine Seiteneffekte deklariert
Benutzerbefehl: project crud subagent plan:command_project_crud_subagent
Benutzerbefehl: project crud subagent
Quelle: code:reviewed_execution_plan
durable_plan
✓ Auto
Keine Seiteneffekte deklariert
Projekt status:project
Objekt: project
Quelle: code:status_machine
observable_only
✓ Auto
Keine Seiteneffekte deklariert

🧠 Fachprozess-Erzählung & Dual Knowledge Architektur

Synthese aus der ideologischen Blaupause (Meta-Fachlogik / Soll), der faktischen System-Implementierung (System-Fachlogik / Ist) und No-Code Customizing für KI-Consultants.

Dual Knowledge Layer
📖

Der durchgängige Businessprozess im Detail (End-to-End Fließtext-Erzählung)

Der durchgängige Projekt- und Serviceprozess in der betrieblichen Praxis

Vom Handwerksbetrieb und Anlagenbauer über den IT-Dienstleister bis zum bundesweiten Service- und Wartungsunternehmen: Centurio ERP verzahnt Projektsteuerung, Werkstattaufträge und mobilen Außendienst zu einem durchgängigen Ablauf.

1. Projektanlage & Strukturierung (Project Initiation & WBS)

Großaufträge und kundenindividuelle Bau- oder Dienstleistungsvorhaben starten im Projektmodul:

  • Übernahme aus Angebot oder Auftrag (quotes, sales): Ein genehmigtes Angebot mit komplexen Montage- oder Bauleistungen wird über cap:projects.project.create_from_sales_order in ein Projekt überführt.
  • Projektstrukturplan (PSP / WBS): Das Projekt wird hierarchisch gegliedert in:
    • Projektkopf: Budget, Gesamtlaufzeit, Projektleiter, Kunde.
    • Phasen: z.B. Planung & Statik, Rohbau / Vorfertigung, Montage vor Ort, Inbetriebnahme & Abnahme.
    • Arbeitspakete / Meilensteine: Fälligkeitstermine und Zahlungsmeilensteine für Abschlagsrechnungen.
  • VOB/B-Kontext (bei Bau- und Montageprojekten): Das System aktiviert automatisch VOB/B-relevante Mechanismen (Bedenkenanmeldungen, Behinderungsanzeigen, förmliche Abnahmen nach § 12 VOB/B).

2. Arbeitsauftragserstellung & Disposition (Work Order Scheduling)

Aus den Arbeitspaketen des Projekts oder als eigenständige Serviceeinsätze (z.B. Reparatur, Wartung) entstehen Arbeitsaufträge (workorders):

  • Der Disponent plant die Aufträge im visuellen Plantafel-Kalender (calendar):
    • Prüfung der Mitarbeiterqualifikationen (z.B. Hochvolt-Schein, Schweißzertifikat nach ISO 9606).
    • Prüfung von Spezialwerkzeugen und Messgeräten.
    • Berücksichtigung von Wegezeiten und Routenoptimierung.
  • Über die Capability cap:workorders.workorder.assign wird der Auftrag dem Techniker oder Montageteam zugewiesen. Der Techniker erhält den Auftrag sofort auf seiner mobilen Service-App.

3. Materialbereitstellung & Fahrzeuglager (Mobile Van Stock)

Für Montage- und Außendiensteinsätze wird Material benötigt:

  • Materialreservierung: Das System prüft die Materialverfügbarkeit (inventory). Benötigte Teile werden für das Projekt reserviert.
  • Fahrzeuglager (Van Stock): Jeder Kundendienstwagen ist im System als rollender Lagerort (location_type = 'van') abgebildet.
  • Der Techniker entnimmt vor Abfahrt Teile aus dem Zentrallager (Umlagerung ins Fahrzeug) oder greift vor Ort direkt auf Standard-Verbrauchsmaterialien (Schrauben, Dichtungen, Kabel) aus seinem Fahrzeugbestand zu.

4. Vor-Ort-Ausführung & Mobile Erfassung (Field Service Execution)

Beim Kunden vor Ort dokumentiert der Techniker die Arbeiten digital auf seinem Tablet:

  • Zeiterfassung (Check-in/out): Ankunft vor Ort, Beginn der Rüstzeit, eigentliche Montagezeit und Pausen werden sekundengenau gestempelt (cap:fieldservice.dispatch.checkin). Fahrzeiten werden separat ausgewiesen.
  • Materialerfassung: Verbaute Ersatzteile werden per Barcode-Scan erfasst. Das System bucht die Teile sofort aus dem Fahrzeuglager aus (cap:fieldservice.dispatch.consume_material).
  • Aufmaß & Checklisten: Technische Prüfschritte (z.B. Druckprüfung, Isolationsmessung, VDE 0100 Prüfung) werden in strukturierten Checklisten protokolliert; Vorher-Nachher-Fotos werden direkt an den Beleg angehängt.

5. Rechtssicheres Abnahmeprotokoll & Kundensignatur (Digital Sign-Off)

Der kritischste Schritt für die spätere Abrechnung ist die förmliche Abnahme:

  • Das System generiert auf dem Tablet den digitalen Montagebericht / das Abnahmeprotokoll.
  • Es listet alle durchgeführten Arbeiten, erfassten Stunden und verbauten Materialien auf.
  • Digitale Unterschrift: Der Kunde zeichnet direkt auf dem Display gegen (cap:fieldservice.dispatch.sign_protocol).
  • Rechtsfolge: Das signierte Protokoll wird unveränderbar als PDF/A im Dokumentenarchiv (documents) festgeschrieben und automatisch per E-Mail an den Kunden gesendet.

6. Nachtragsmanagement & Behinderungsanzeigen

Treten während der Ausführung unvorhersehbare Zusatzaufwände auf:

  • Der Bauleiter erfasst eine Nachtragsvereinbarung (z.B. zusätzlicher Aushub, geänderte Rohrleitungsführung).
  • Bei Verzögerungen durch bauseitige Vorleistungen anderer Gewerke erzeugt das System per Knopfdruck eine förmliche Behinderungsanzeige nach § 6 Abs. 1 VOB/B, um Lieferfristen zu hemmen und Regressansprüche abzuwehren.

7. Gateway-basierter Projektabschluss & Fakturierung

  • Soll-Ist-Nachkalkulation: Das System vergleicht die budgetierten Plankosten mit den real gestempelten Zeiten und Materialverbräuchen. Projektdeckungsbeitrag und Margenabweichungen werden sofort im Controlling sichtbar.
  • Fakturierung: Über den Gateway gw:project_billing@v1 wird der Leistungsstand an das Rechnungsmodul (invoices) übergeben:
    • Abschlagsrechnung: Nach erreichtem Baufortschritt oder Meilenstein.
    • Schlussrechnung: Nach mängelfreier Abnahme mit Verrechnung aller bisherigen Abschlagszahlungen und eventuellem Sicherheitseinbehalt (z.B. 5% Gewährleistungseinbehalt nach VOB/B).
🏛️

Meta-Fachlogik: Ideologische Blaupause, Soll-Weltbild & Normen

Meta-Fachlogik: Die ideologische Blaupause & das normative Weltbild

Die Meta-Fachlogik des Projekt- und Servicemanagements stützt sich auf DIN 69901 (Projektmanagement), die Vergabe- und Vertragsordnung für Bauleistungen (VOB/B), das Werkvertragsrecht nach BGB (§§ 631 ff.) und anerkannte Regeln der Technik.

1. Werkvertragsrecht (BGB §§ 631 ff.) vs. Dienstvertrag (§ 611 BGB)

  • Erfolgsbezogenheit des Werkvertrags: Beim Werkvertrag schuldet der Auftragnehmer nicht nur das Tätigwerden, sondern die Herbeiführung des versprochenen Werkerfolgs.
  • Bedeutung der Abnahme (§ 640 BGB / § 12 VOB/B):
    • Die Abnahme ist der juristische Dreh- und Angelpunkt: Mit ihr geht die Gefahr des zufälligen Untergangs auf den Besteller über, die Beweislast für Mängel kehrt sich um, die Fälligkeit der Vergütung tritt ein und die Verjährungsfrist für Mängelansprüche (Gewährleistung) beginnt zu laufen.
    • Das Soll-Modell verbietet das Stellen einer Schlussrechnung ohne vorliegendes, beidseitig gezeichnetes Abnahmeprotokoll.

2. VOB/B-Standards (Vergabe- und Vertragsordnung für Bauleistungen)

  • Förmliche Abnahme (§ 12 VOB/B): Verlangt gemeinsame Begehung, Niederschrift aller Mängel und Festlegung von Beseitigungsfristen.
  • Bedenkenanmeldung (§ 4 Abs. 3 VOB/B): Verpflichtung des Auftragnehmers, den Auftraggeber schriftlich zu warnen, wenn Vorgaben, Vorleistungen anderer Handwerker oder Güteanforderungen ungeeignet sind.
  • Sicherheitseinbehalt (§ 17 VOB/B): Typischerweise 5% der Nettoabrechnungssumme als Gewährleistungsbürgschaft über 4 oder 5 Jahre.

3. Invarianten des Soll-Modells

  1. Kein Serviceeinsatz ohne dokumentierten Leistungsnachweis mit Zeiten und Material.
  2. Keine Schlussrechnung ohne mängelfreie oder vorbehaltlose Abnahme.
  3. Materialbuchungen aus Fahrzeuglagern müssen dem jeweiligen Auftrag zugeordnet sein (kein anonymer Verbrauch).
  4. Projektänderungen mit Kostenfolge verlangen zwingend einen genehmigten Nachtrag.

Normbezug für projects

Prüfkatalog Standards-Registry v2026.10.1. Dieser Abschnitt ordnet Prüfreferenzen zu und stellt nicht fest, dass das Modul eine Norm einhält; keine Kataloganforderung ist als PASS bewertet.

Geführte Prüfreferenzen:

  • apqc-pcf-8.0, APQC Process Classification Framework (PCF) – Cross-Industry, Ausgabe PCF Cross-Industry v8.0 (2026-02-27). Art: reference_process. Nur öffentliche Zusammenfassung. Keine Volltextprüfung. Keine modulspezifische Kataloganforderung. Die Zuordnung bleibt eine Prüfreferenz.

Im Auditauftrag zusätzlich genannt und nicht im Prüfkatalog v2026.10.1: ISO 21502, ISO 19650, DIN 276. Dafür gibt es hier keine Klausel und keine Aussage, dass eine Vorgabe eingehalten wird.

Plattformweite Katalogwerke mit Geltungsbereich all (unter anderem WCAG 2.2, EN 301 549 V4.1.1, ISO 9241-110:2020, ISO 9241-210:2019, ISO/IEC 25010:2023, ISO 9001:2026, ISO/IEC 27001:2022, APQC PCF 8.0, DSGVO, EU AI Act) umfassen dieses Modul mit. Wo der Volltext fehlt, bleibt der Zugang ohne Quelle, lizenzpflichtig oder nur als öffentliche Zusammenfassung gekennzeichnet. Auch diese Nennung weist keine eingehaltene Vorgabe nach.

⚙️

Systemische Fachlogik: Faktische Umsetzung in Centurio ERP & Capabilities

Systemische Fachlogik: Die faktische Umsetzung in Centurio ERP

Die System-Fachlogik dokumentiert die Realisierung in den Modulen projects, workorders und fieldservice.

1. Datenmodelle & Semantische Schicht (ORM)

  • Project: Projektkopf (Felder: id, tenant_id, project_number, name, customer_id, project_manager_id, status, budget_net_amount, planned_start, planned_end, is_vob).
  • ProjectPhase: Phasen und Meilensteine (Felder: project_id, name, sequence, milestone_date, is_billing_milestone, billing_amount).
  • WorkOrder: Arbeitsauftrag (Felder: id, project_id, order_number, assigned_user_id, status, scheduled_date, estimated_hours, location_address).
  • FieldServiceDispatch: Außendiensteinsatz mit Check-in/out-Zeiten, GPS-Koordinaten und digitalem Signatur-Blob.
  • ProjectClaim: VOB-Bedenkenanmeldung oder Nachtrag.

2. Das Capability-Register

  • cap:projects.project.create: Neuanlage eines Projekts mit PSP-Struktur.
  • cap:projects.project.create_from_sales_order: Übernahme eines Verkaufsauftrags in ein Projekt.
  • cap:workorders.workorder.create: Erzeugung eines Arbeitsauftrags.
  • cap:workorders.workorder.assign: Disposition auf Techniker und Arbeitsplatz.
  • cap:fieldservice.dispatch.checkin: Beginn des Vor-Ort-Einsatzes (Zeiterfassung).
  • cap:fieldservice.dispatch.checkout: Ende des Vor-Ort-Einsatzes.
  • cap:fieldservice.dispatch.consume_material: Abbuchung von Teilen aus dem Fahrzeuglager.
  • cap:fieldservice.dispatch.sign_protocol: Erfassung der Kundensignatur auf dem Abnahmeprotokoll.
  • cap:projects.project.record_milestone_acceptance: Bestätigung eines Abrechnungsmeilensteins.

3. Der Gateway gw:project_billing@v1

Der Projektabrechnungs-Gateway steuert Abschlags- und Schlussrechnungen:

  1. Validierung: Prüft Abnahmeprotokolle, signierte Stundenzettel und Meilenstein-Freigaben.
  2. Kostenabgleich: Zieht alle real gestempelten Zeiten und Materialkosten in die Nachkalkulation.
  3. Rechnungserzeugung: Erzeugt transaktional die Abschlags- oder Schlussrechnung in invoices unter Berücksichtigung von bisherigen Zahlungen und VOB-Sicherheitseinbehalt.
  4. Outbox-Signal: Feuert PROJECT_BILLING_COMPLETED.

4. Statusmodelle

  • Projekt-Status: planning ➔ in_progress ➔ acceptance_pending ➔ completed oder on_hold.
  • Arbeitsauftrag: draft ➔ dispatched ➔ in_progress ➔ signed ➔ invoiced.
🤖

KI-Consultant Leitfaden: Customizing- & No-Code-Konzept (Soll-Ist-Synthese)

AI Solution Architect Blueprint

KI-Consultant Blueprint: Customizing & No-Code Architektur

Anleitung für Solution Architects zur Anpassung von Projekt- und Serviceabläufen.

1. Kundenanforderungsanalyse

  • Handelt es sich um Bauprojekte nach VOB/B mit Abschlagsrechnungen oder um reine Serviceeinsätze auf Stundenbasis?
  • Welche Checklisten müssen vor Ort ausgefüllt werden (z.B. UVV-Prüfung, DGUV V3, Brandschutz)?
  • Gibt es rollende Fahrzeuglager (Service-Transporter)?

2. No-Code Zusatzfelder (Custom Fields)

Im No-Code Studio (/semantic/customizing):

  • Auf Project:
    • site_manager_contact (Text): Telefonnummer des Bauleiters vor Ort.
    • security_retainage_percent (Dezimal): Gewährleistungseinbehalt nach VOB (z.B. 5%).
  • Auf WorkOrder:
    • access_code_or_key_box (Text): Torschlüsselcode oder Schlüsseltresor-PIN für den Monteur.
    • required_safety_equipment (Auswahlliste: Helm, Absturzsicherung, Atemschutz).

3. No-Code Workflow Canvas DAGs

Blueprint A: Mobiles Abnahmeprotokoll ➔ Sofortfaktura (Mobile Sign-off DAG)
  • Trigger-Node: cap:fieldservice.dispatch.sign_protocol erfolgreich ausgeführt.
  • Condition-Node: workorder.billing_policy == 'immediate_post_signing'.
  • Action-Node 1: Erzeuge PDF/A-Dokument mit eingebetteter Signatur und sende Kopie an Kunden.
  • Action-Node 2: Rufe cap:invoices.invoice.create auf und übernehme quittierte Stunden und Materialien in die Rechnung.
Blueprint B: VOB-Fristenüberwachung bei Bedenkenanmeldung
  • Trigger-Node: Erfassung eines ProjectClaim (Typ: Bedenkenanmeldung).
  • Action-Node: Setze Fristenwiedervorlage auf 5 Werktage und informiere Projektleiter via Push über ausstehende Antwort des Bauherrn.

📚 Operative Prozessbegriffe & Transaktionsschnittstellen

Zentrale Fachbegriffe im Prozesszusammenhang (Operatives Modell)
Projektstrukturplan (PSP)
Hierarchische Gliederung aller Projektphasen, Arbeitspakete und Meilensteine.
VOB/B-Abnahme
Förmliche Bestätigung des Werkerfolgs nach § 12 VOB/B mit Beginn der Gewährleistung.
Fahrzeuglager (Van Stock)
Rollender Lagerort im Kundendienstfahrzeug mit mobiler Bestandsführung.
Abnahmeprotokoll
Rechtsverbindlicher Nachweis der erbrachten Leistung mit digitaler Kundensignatur.
Sicherheitseinbehalt
Fiskalischer Einbehalt (z.B. 5%) zur Absicherung von Gewährleistungsansprüchen.
Bedenkenanmeldung (§ 4 Abs. 3 VOB/B)
Schriftlicher Warnhinweis an den Bauherrn bei ungeeigneten Vorgaben.
Abschlagsrechnung
Teilrechnung über bereits fertiggestellte Bau- oder Meilensteinabschnitte.
📥 Eingänge & Trigger (Inputs)
  • Verkaufsauftrag mit Projekt- oder Montagepositionen
  • Kundenstörungsmeldung oder Wartungstermin über Ticket-System
  • Bauausschreibung mit Leistungsverzeichnis (GAEB/Excel)
  • Wartungsvertrag mit zyklischen Inspektionsintervallen
📤 Ausgänge & Arbeitsergebnisse (Outputs)
  • Projektstrukturpläne mit Termin- und Ressourcenleiste (Gantt)
  • Mobil signierte Abnahmeprotokolle und Montageberichte
  • Revisionssichere VOB-Schriftstücke (Behinderungsanzeigen, Bedenken)
  • Abschlags- und Schlussrechnungen mit Soll-Ist-Nachkalkulation
  • Aktualisierte Bestandsspiegel der Fahrzeuglager
⚡ Kaskaden & Folgeprozesse (Cascades)
  • protocol_signed -> trigger_invoice_creation: Sofortige Erzeugung der Rechnung nach Signatur
  • material_consumed -> van_stock_depleted: Abbuchung der Teile aus dem Kundendiensttransporter
  • milestone_reached -> unlock_billing_phase: Freigabe der nächsten Abschlagsrechnung
  • project_completed -> finalize_job_costing: Festschreibung der Nachkalkulation im Controlling
🛡️ Nebenprozesse & Resilienz
  • Nachtragsmanagement bei unvorhergesehenen Mehraufwänden
  • Mängelrügen und Nacharbeiten vor endgültiger Schlussabnahme
  • Fahrzeuglager-Inventur und rollierende Bestandsauffüllung
  • Schnittstellenanbindung zu GAEB-Leistungsverzeichnissen (Bauabrechnung)
💡 No-Code Checkliste & Praxistipps
  • Stundensätze und Zuschläge (Überstunden, Nachtarbeit, Schmutzzulage) in Stammdaten pflegen
  • VOB/B-Vertragsoptionen je Projektkategorie aktivieren
  • Mobile Abnahmechecklisten für Techniker auf dem Tablet konfigurieren
  • No-Code Zusatzfelder für Bauleiter und Gewährleistungseinbehalt auf Project anlegen

🗄️ Data Models & Fields

ProjectMeasurementLines project_measurement_lines RLS Aktiv
15 Fields / Columns

Tabelle project_measurement_lines

Feldname Data Type Required Schlüssel Functional Meaning
measurement_id UUID Ja * FK ➔ project_measurements.id Feld measurement_id
quote_item_id UUID Nein FK ➔ quote_items.id Feld quote_item_id
pos_number VARCHAR(32) Ja * - Feld pos_number
description VARCHAR(255) Ja * - Feld description
formula VARCHAR(255) Nein - Feld formula
quantity_period NUMERIC(12, 3) Ja * - Feld quantity_period
quantity_cumulative NUMERIC(12, 3) Ja * - Feld quantity_cumulative
unit VARCHAR(16) Ja * - Feld unit
unit_price NUMERIC(14, 2) Ja * - Feld unit_price
total_net_cumulative NUMERIC(14, 2) Ja * - Feld total_net_cumulative
id UUID Nein PK Feld id
tenant_id UUID Ja * FK ➔ organizations.id Feld tenant_id
created_at DATETIME Ja * - Feld created_at
updated_at DATETIME Ja * - Feld updated_at
metadata JSONB Ja * - Feld metadata
ProjectMeasurements project_measurements RLS Aktiv
17 Fields / Columns

Tabelle project_measurements

Feldname Data Type Required Schlüssel Functional Meaning
project_id UUID Ja * FK ➔ projects.id Feld project_id
quote_id UUID Nein FK ➔ quotes.id Feld quote_id
measurement_number VARCHAR(64) Ja * - Feld measurement_number
measurement_date DATE Ja * - Feld measurement_date
status VARCHAR(48) Ja * - Feld status
approved_by VARCHAR(255) Nein - Feld approved_by
approved_at DATETIME Nein - Feld approved_at
notes TEXT Nein - Feld notes
id UUID Nein PK Feld id
tenant_id UUID Ja * FK ➔ organizations.id Feld tenant_id
created_at DATETIME Ja * - Feld created_at
updated_at DATETIME Ja * - Feld updated_at
created_by UUID Nein - Feld created_by
updated_by UUID Nein - Feld updated_by
source_type VARCHAR(32) Nein - Feld source_type
source_id UUID Nein - Feld source_id
metadata JSONB Ja * - Feld metadata
ProjectMilestones project_milestones RLS Aktiv
18 Fields / Columns

Tabelle project_milestones

Feldname Data Type Required Schlüssel Functional Meaning
project_id UUID Ja * FK ➔ projects.id Feld project_id
name VARCHAR(255) Ja * - Feld name
due_date DATE Nein - Feld due_date
sort INTEGER Ja * - Feld sort
status VARCHAR(16) Ja * - Feld status
reached_at DATETIME Nein - Feld reached_at
reached_by UUID Nein - Feld reached_by
predecessor_id UUID Nein FK ➔ project_milestones.id Feld predecessor_id
notes TEXT Nein - Feld notes
id UUID Nein PK Feld id
tenant_id UUID Ja * FK ➔ organizations.id Feld tenant_id
created_at DATETIME Ja * - Feld created_at
updated_at DATETIME Ja * - Feld updated_at
created_by UUID Nein - Feld created_by
updated_by UUID Nein - Feld updated_by
source_type VARCHAR(32) Nein - Feld source_type
source_id UUID Nein - Feld source_id
metadata JSONB Ja * - Feld metadata
ProjectRateCards project_rate_cards RLS Aktiv
16 Fields / Columns

Tabelle project_rate_cards

Feldname Data Type Required Schlüssel Functional Meaning
project_id UUID Nein FK ➔ projects.id Feld project_id
customer_id UUID Nein FK ➔ customers.id Feld customer_id
role_name VARCHAR(64) Ja * - Feld role_name
hourly_rate NUMERIC(14, 2) Ja * - Feld hourly_rate
currency VARCHAR(3) Ja * - Feld currency
valid_from DATE Nein - Feld valid_from
valid_until DATE Nein - Feld valid_until
id UUID Nein PK Feld id
tenant_id UUID Ja * FK ➔ organizations.id Feld tenant_id
created_at DATETIME Ja * - Feld created_at
updated_at DATETIME Ja * - Feld updated_at
created_by UUID Nein - Feld created_by
updated_by UUID Nein - Feld updated_by
source_type VARCHAR(32) Nein - Feld source_type
source_id UUID Nein - Feld source_id
metadata JSONB Ja * - Feld metadata
ProjectTimeEntries project_time_entries RLS Aktiv
24 Fields / Columns

Tabelle project_time_entries

Feldname Data Type Required Schlüssel Functional Meaning
project_id UUID Ja * FK ➔ projects.id Feld project_id
user_id UUID Ja * FK ➔ users.id Feld user_id
ticket_id UUID Nein FK ➔ tickets.id Feld ticket_id
invoice_id UUID Nein FK ➔ invoices.id Feld invoice_id
entry_date DATE Ja * - Feld entry_date
duration_minutes INTEGER Ja * - Feld duration_minutes
rounded_minutes INTEGER Ja * - Feld rounded_minutes
activity_description TEXT Ja * - Feld activity_description
internal_notes TEXT Nein - Feld internal_notes
is_billable BOOLEAN Ja * - Feld is_billable
hourly_rate NUMERIC(14, 2) Ja * - Feld hourly_rate
total_amount_net NUMERIC(14, 2) Ja * - Feld total_amount_net
billing_status VARCHAR(48) Ja * - Feld billing_status
approved_by UUID Nein FK ➔ users.id Feld approved_by
approved_at DATETIME Nein - Feld approved_at
id UUID Nein PK Feld id
tenant_id UUID Ja * FK ➔ organizations.id Feld tenant_id
created_at DATETIME Ja * - Feld created_at
updated_at DATETIME Ja * - Feld updated_at
created_by UUID Nein - Feld created_by
updated_by UUID Nein - Feld updated_by
source_type VARCHAR(32) Nein - Feld source_type
source_id UUID Nein - Feld source_id
metadata JSONB Ja * - Feld metadata
Projects projects RLS Aktiv
41 Fields / Columns

Tabelle projects

Feldname Data Type Required Schlüssel Functional Meaning
project_number VARCHAR(32) Ja * - Feld project_number
name VARCHAR(255) Ja * - Feld name
contract_id UUID Nein - Feld contract_id
parent_id UUID Nein FK ➔ projects.id Feld parent_id
customer_id UUID Nein FK ➔ customers.id Feld customer_id
supplier_id UUID Nein FK ➔ suppliers.id Feld supplier_id
partner_type VARCHAR(32) Ja * - Feld partner_type
status VARCHAR(48) Ja * - Feld status
description TEXT Nein - Feld description
street VARCHAR(255) Nein - Feld street
postal_code VARCHAR(16) Nein - Feld postal_code
city VARCHAR(128) Nein - Feld city
country_code VARCHAR(2) Nein - Feld country_code
latitude NUMERIC(9, 6) Nein - Feld latitude
longitude NUMERIC(9, 6) Nein - Feld longitude
trade VARCHAR(64) Nein - Feld trade
manager_user_id UUID Nein FK ➔ users.id Feld manager_user_id
site_contact_name VARCHAR(255) Nein - Feld site_contact_name
site_contact_phone VARCHAR(64) Nein - Feld site_contact_phone
access_notes TEXT Nein - Feld access_notes
planned_start DATE Nein - Feld planned_start
planned_end DATE Nein - Feld planned_end
actual_start DATE Nein - Feld actual_start
actual_end DATE Nein - Feld actual_end
quoted_value NUMERIC(14, 2) Nein - Feld quoted_value
estimated_cost NUMERIC(14, 2) Nein - Feld estimated_cost
estimated_hours NUMERIC(14, 4) Nein - Feld estimated_hours
estimated_labor_cost NUMERIC(14, 2) Nein - Feld estimated_labor_cost
estimated_material_cost NUMERIC(14, 2) Nein - Feld estimated_material_cost
currency VARCHAR(3) Ja * - Feld currency
tags ARRAY Ja * - Feld tags
id UUID Nein PK Feld id
tenant_id UUID Ja * FK ➔ organizations.id Feld tenant_id
created_at DATETIME Ja * - Feld created_at
updated_at DATETIME Ja * - Feld updated_at
created_by UUID Nein - Feld created_by
updated_by UUID Nein - Feld updated_by
source_type VARCHAR(32) Nein - Feld source_type
source_id UUID Nein - Feld source_id
metadata JSONB Ja * - Feld metadata
deleted_at DATETIME Nein - Feld deleted_at

🔌 Entry Points (UI & APIs)

Art Method Endpoint / Path Titel & Zweck Required Role
⚡ REST API DELETE /api/v1/projects/{project_id}
delete_project
Semantic binding: operator_surface; mutation=True
projects
⚡ REST API GET /api/v1/projects
list_projects
Semantic binding: inventory_only; mutation=False
projects
⚡ REST API GET /api/v1/projects/{project_id}
get_project
Semantic binding: inventory_only; mutation=False
projects
⚡ REST API GET /api/v1/projects/{project_id}/budget-status
get_budget_status
Semantic binding: inventory_only; mutation=False
projects
⚡ REST API GET /api/v1/projects/{project_id}/measurements
list_measurements
Semantic binding: inventory_only; mutation=False
projects
⚡ REST API GET /api/v1/projects/{project_id}/measurements/{measurement_id}
get_measurement
Semantic binding: inventory_only; mutation=False
projects
⚡ REST API GET /api/v1/projects/{project_id}/milestones
list_milestones
Semantic binding: inventory_only; mutation=False
projects
⚡ REST API GET /api/v1/projects/{project_id}/rate-cards
list_rate_cards
Semantic binding: inventory_only; mutation=False
projects
⚡ REST API GET /api/v1/projects/{project_id}/subprojects
list_subprojects
Semantic binding: inventory_only; mutation=False
projects
⚡ REST API GET /api/v1/projects/{project_id}/summary
get_project_summary
Semantic binding: inventory_only; mutation=False
projects
⚡ REST API GET /api/v1/projects/{project_id}/time-entries
list_time_entries
Semantic binding: inventory_only; mutation=False
projects
⚡ REST API GET /api/v1/projects/{project_id}/workorders
list_project_workorders
Semantic binding: inventory_only; mutation=False
projects
⚡ REST API GET /portal/{slug}/projekte
projects_page
Semantic binding: inventory_only; mutation=False
projects
⚡ REST API GET /projects
projects_page
Semantic binding: inventory_only; mutation=False
projects
⚡ REST API GET /projects/new
project_create_page
Semantic binding: inventory_only; mutation=False
projects
⚡ REST API GET /projects/{project_id}
project_detail_page
Semantic binding: inventory_only; mutation=False
projects
⚡ REST API GET /projects/{project_id}/edit
project_detail_page
Semantic binding: inventory_only; mutation=False
projects
⚡ REST API PATCH /api/v1/projects/{project_id}
update_project
Semantic binding: operator_surface; mutation=True
projects
⚡ REST API POST /api/v1/projects
create_project
Semantic binding: operator_surface; mutation=True
projects
⚡ REST API POST /api/v1/projects/{project_id}/materials
book_project_material
Semantic binding: operator_surface; mutation=True
projects
⚡ REST API POST /api/v1/projects/{project_id}/measurements
create_measurement
Semantic binding: operator_surface; mutation=True
projects
⚡ REST API POST /api/v1/projects/{project_id}/measurements/{measurement_id}/approve
approve_measurement
Semantic binding: operator_surface; mutation=True
projects
⚡ REST API POST /api/v1/projects/{project_id}/measurements/{measurement_id}/create-cumulative-invoice
create_cumulative_invoice
Semantic binding: operator_surface; mutation=True
projects
⚡ REST API POST /api/v1/projects/{project_id}/measurements/{measurement_id}/create-final-invoice
create_vob_final_invoice
Semantic binding: operator_surface; mutation=True
projects
⚡ REST API POST /api/v1/projects/{project_id}/measurements/{measurement_id}/lines
add_measurement_lines
Semantic binding: operator_surface; mutation=True
projects
⚡ REST API POST /api/v1/projects/{project_id}/milestones
add_milestone
Semantic binding: operator_surface; mutation=True
projects
⚡ REST API POST /api/v1/projects/{project_id}/milestones/{milestone_id}/reach
reach_milestone
Semantic binding: operator_surface; mutation=True
projects
⚡ REST API POST /api/v1/projects/{project_id}/milestones/{milestone_id}/unreach
unreach_milestone
Semantic binding: operator_surface; mutation=True
projects
⚡ REST API POST /api/v1/projects/{project_id}/rate-cards
create_rate_card
Semantic binding: operator_surface; mutation=True
projects
⚡ REST API POST /api/v1/projects/{project_id}/subprojects
create_subproject
Semantic binding: operator_surface; mutation=True
projects
⚡ REST API POST /api/v1/projects/{project_id}/time-entries
log_time
Semantic binding: operator_surface; mutation=True
projects
⚡ REST API POST /api/v1/projects/{project_id}/time-entries/approve
approve_time_entries
Semantic binding: operator_surface; mutation=True
projects
⚡ REST API POST /api/v1/projects/{project_id}/time-entries/invoice
generate_tm_invoice
Semantic binding: operator_surface; mutation=True
projects
⚡ REST API POST /api/v1/projects/{project_id}/worklogs
record_project_worklog
Semantic binding: operator_surface; mutation=True
projects
⚡ REST API POST /api/v1/projects/{project_id}/workorders
create_project_workorder
Semantic binding: operator_surface; mutation=True
projects

🛡️ Regulatory & Compliance

Dieses Modul unterliegt folgenden gesetzlichen, regulatorischen und Revisionsstandards:

  • GoBD Nachvollziehbarkeit
  • Mandanten-Isolation (PostgreSQL RLS)