Centurio System & Module Documentation
🏛️ Platform Architecture 🔑 Login
All Modules / inventory_logistics / Vermietung & Mietgeräte
📘

Vermietung & Mietgeräte

rental inventory_logistics 🛡️ RLS Protected

Vermietung & Mietgeräte — aus Code abgeleitete Prozess- und API-Dokumentation.

Fachliche Bestimmung: Vertragsmanagement & Vermietung steuert Dauerschuldverhältnisse und den Gerätemietzyklus: Verwaltung von Rahmen-, Wartungs-, Leasing- und Mietverträgen mit Kündigungs- und Verlängerungsfristen, automatisierte periodische Fakturierung (Abonnement- und wiederkehrende Rechnungen), physische Ausgabe und Rücknahme von Mietgeräten mit Zustandsprotokoll und Schadenserfassung sowie Kautionsverwaltung und Endabrechnung.

⚡ Workflows & Lifecycles

Benutzerbefehl: rental agent plan:command_rental_agent

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

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

Mietbuchung status:rental_booking

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

1. reserved
reserved
Status «reserved» der Zustandsmaschine Mietbuchung.
2. picked_up
picked_up
Status «picked_up» der Zustandsmaschine Mietbuchung.
3. returned
returned
Status «returned» der Zustandsmaschine Mietbuchung.
4. overdue
overdue
Status «overdue» der Zustandsmaschine Mietbuchung.
5. cancelled
cancelled
Status «cancelled» der Zustandsmaschine Mietbuchung.

Mietauftrag status:rental_order

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

1. draft
draft
Status «draft» der Zustandsmaschine Mietauftrag.
2. reserved
reserved
Status «reserved» der Zustandsmaschine Mietauftrag.
3. active
active
Status «active» der Zustandsmaschine Mietauftrag.
4. closed
closed
Status «closed» der Zustandsmaschine Mietauftrag.
5. cancelled
cancelled
Status «cancelled» der Zustandsmaschine Mietauftrag.

⚙️ Fachprozesse & Capabilities (System-Fachlogik)

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

Gesamt: 35 manual_entry: 1 engine: 28 operator_surface: 1 engine_step: 2 durable_plan: 1 observable_only: 2
Capability & Schlüssel Fachliche Bezeichnung Ausführung / Coverage Risikostufe & Freigabe Effekte & Kaskaden
Agent-Einstieg rental_agent agent_entry:rental_agent
Agent-Einstieg rental_agent
Quelle: code:module_agent_map
manual_entry
✓ Auto
Keine Seiteneffekte deklariert
Objekt sperren capability:rental.asset.block
Op: rental.asset.block
Objekt: rental_asset
Quelle: code:capability_registry
⚙️ Engine
✓ Auto Risiko: business_record
  • rental.asset.block
Mietbuchung anlegen capability:rental.booking.create
Op: rental.booking.create
Intent: create_rental_booking
Quelle: code:capability_registry
⚙️ Engine
✓ Auto Risiko: business_record
  • rental_booking.created
Mietbuchung verlängern capability:rental.booking.extend
Op: rental.booking.extend
Objekt: rental_booking
Quelle: code:capability_registry
⚙️ Engine
✓ Auto Risiko: business_record
  • rental_booking.extended
Miete pausieren capability:rental.booking.pause
Op: rental.booking.pause
Objekt: rental_booking
Quelle: code:capability_registry
⚙️ Engine
✓ Auto Risiko: business_record
  • rental.booking.pause
Schaden belasten capability:rental.damage.charge
Op: rental.damage.charge
Objekt: rental_booking
Quelle: code:capability_registry
⚙️ Engine
✓ Auto Risiko: business_record
  • rental.damage.charge
Kaution freigeben capability:rental.deposit.release
Op: rental.deposit.release
Objekt: rental_booking
Quelle: code:capability_registry
⚙️ Engine
✓ Auto Risiko: business_record
  • rental.deposit.release
Mietpreis neu capability:rental.pricing.recalculate
Op: rental.pricing.recalculate
Objekt: rental_booking
Quelle: code:capability_registry
⚙️ Engine
✓ Auto Risiko: business_record
  • rental.pricing.recalculate
Rental: apply deposit capability:rental.rental.apply_deposit
Op: rental.rental.apply_deposit
Objekt: rental
Quelle: code:capability_registry
⚙️ Engine
✓ Auto Risiko: business_record
  • rental.apply_deposit
Rental: cancel capability:rental.rental.cancel
Op: rental.rental.cancel
Objekt: rental
Quelle: code:capability_registry
⚙️ Engine
✓ Auto Risiko: business_record
  • rental.cancel
Rental: confirm deposit from payment order capability:rental.rental.confirm_deposit_from_payment_order
Op: rental.rental.confirm_deposit_from_payment_order
Objekt: rental
Quelle: code:capability_registry
⚙️ Engine
✓ Auto Risiko: business_record
  • rental.confirm_deposit_from_payment_order
Rental: confirm pickup capability:rental.rental.confirm_pickup
Op: rental.rental.confirm_pickup
Objekt: rental
Quelle: code:capability_registry
⚙️ Engine
✓ Auto Risiko: business_record
  • rental.confirm_pickup
Rental: confirm return capability:rental.rental.confirm_return
Op: rental.rental.confirm_return
Objekt: rental
Quelle: code:capability_registry
⚙️ Engine
✓ Auto Risiko: business_record
  • rental.confirm_return
Rental: create capability:rental.rental.create
Op: rental.rental.create
Objekt: rental
Quelle: code:capability_registry
⚙️ Engine
✓ Auto Risiko: business_record
  • rental.create
Rental: create cycle invoice capability:rental.rental.create_cycle_invoice
Op: rental.rental.create_cycle_invoice
Objekt: rental
Quelle: code:capability_registry
⚙️ Engine
✓ Auto Risiko: business_record
  • rental.create_cycle_invoice
Rental: create deposit invoice capability:rental.rental.create_deposit_invoice
Op: rental.rental.create_deposit_invoice
Objekt: rental
Quelle: code:capability_registry
⚙️ Engine
✓ Auto Risiko: business_record
  • rental.create_deposit_invoice
Rental: create from portal calloff capability:rental.rental.create_from_portal_calloff
Op: rental.rental.create_from_portal_calloff
Objekt: rental
Quelle: code:capability_registry
⚙️ Engine
✓ Auto Risiko: business_record
  • rental.create_from_portal_calloff
Rental: create from product capability:rental.rental.create_from_product
Op: rental.rental.create_from_product
Objekt: rental
Quelle: code:capability_registry
⚙️ Engine
✓ Auto Risiko: business_record
  • rental.create_from_product
Rental: create hire invoice capability:rental.rental.create_hire_invoice
Op: rental.rental.create_hire_invoice
Objekt: rental
Quelle: code:capability_registry
⚙️ Engine
✓ Auto Risiko: business_record
  • rental.create_hire_invoice
Rental: create kit capability:rental.rental.create_kit
Op: rental.rental.create_kit
Objekt: rental
Quelle: code:capability_registry
⚙️ Engine
✓ Auto Risiko: business_record
  • rental.create_kit
Rental: create order capability:rental.rental.create_order
Op: rental.rental.create_order
Objekt: rental
Quelle: code:capability_registry
⚙️ Engine
✓ Auto Risiko: business_record
  • rental.create_order
Rental: create rate card capability:rental.rental.create_rate_card
Op: rental.rental.create_rate_card
Objekt: rental
Quelle: code:capability_registry
⚙️ Engine
✓ Auto Risiko: business_record
  • rental.create_rate_card
Rental: extend capability:rental.rental.extend
Op: rental.rental.extend
Objekt: rental
Quelle: code:capability_registry
⚙️ Engine
✓ Auto Risiko: business_record
  • rental.extend
Rental: mark overdue batch capability:rental.rental.mark_overdue_batch
Op: rental.rental.mark_overdue_batch
Objekt: rental
Quelle: code:capability_registry
⚙️ Engine
✓ Auto Risiko: business_record
  • rental.mark_overdue_batch
Rental: start deposit checkout capability:rental.rental.start_deposit_checkout
Op: rental.rental.start_deposit_checkout
Objekt: rental
Quelle: code:capability_registry
⚙️ Engine
✓ Auto Risiko: business_record
  • rental.start_deposit_checkout
Rental: update rate card capability:rental.rental.update_rate_card
Op: rental.rental.update_rate_card
Objekt: rental
Quelle: code:capability_registry
⚙️ Engine
✓ Auto Risiko: business_record
  • rental.update_rate_card
Rental: update settings capability:rental.rental.update_settings
Op: rental.rental.update_settings
Objekt: rental
Quelle: code:capability_registry
⚙️ Engine
✓ Auto Risiko: business_record
  • rental.update_settings
Mietausgabe (On-Hire) capability:rental_checkout
Op: rental_checkout
Intent: confirm_rental_pickup
Quelle: code:capability_registry
⚙️ Engine
✓ Auto Risiko: business_record
  • engine:rental_checkout
Mietrückgabe abschließen capability:rental_close
Op: rental_close
Intent: confirm_rental_return
Quelle: code:capability_registry
⚙️ Engine
✓ Auto Risiko: business_record
  • engine:rental_close
rental_booking: edit form form_surface_anchor:rental_booking.edit
Objekt: rental_booking
Quelle: code:erp_form_surface
operator_surface
✓ Auto
Keine Seiteneffekte deklariert
Mietausgabe (On-Hire) gateway:rental_checkout
Op: rental_checkout
Mietausgabe (On-Hire)
Quelle: code:reviewed_gateway
⚙️ Engine
✓ Auto
Keine Seiteneffekte deklariert
Mietrückgabe abschließen gateway:rental_close
Op: rental_close
Mietrückgabe abschließen
Quelle: code:reviewed_gateway
⚙️ Engine
✓ Auto
Keine Seiteneffekte deklariert
Benutzerbefehl: rental agent plan:command_rental_agent
Benutzerbefehl: rental agent
Quelle: code:reviewed_execution_plan
durable_plan
✓ Auto
Keine Seiteneffekte deklariert
Mietbuchung status:rental_booking
Objekt: rental_booking
Quelle: code:status_machine
observable_only
✓ Auto
Keine Seiteneffekte deklariert
Mietauftrag status:rental_order
Objekt: rental_order
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 Vertrags- und Mietprozess in der betrieblichen Praxis

Verträge und Mietmodelle sichern wiederkehrende Umsätze (Recurring Revenue), erfordern jedoch höchste kaufmännische und juristische Wachsamkeit bei Fristen, Gerätezuständen und periodischen Abrechnungsläufen.

1. Vertragsinitiierung & Vertragsarten

Verträge entstehen aus erfolgreichen Vertriebsangeboten (quotes) oder Kundenvereinbarungen:

  • Vertragstypen in Centurio ERP:
    • Wartungs- & Serviceverträge (SLA): Feste monatliche oder jährliche Servicepauschalen mit garantierten Reaktionszeiten.
    • Mietverträge für Maschinen & Geräte (rental): Kurz- oder Langzeitmiete von Baumaschinen, Werkzeugen, Fahrzeugen oder Eventtechnik.
    • Software-Abonnements & Lizenzen (SaaS): Abrechnung nach Nutzeranzahl oder Funktionsumfang.
    • Lieferanten-Rahmenverträge: Konditionsvereinbarungen für den Einkauf (purchasing).
  • Vertragskopf: Über cap:contracts.contract.create wird der Vertrag angelegt mit Laufzeitbeginn, Mindestvertragslaufzeit (z.B. 24 Monate), Kündigungsfrist (z.B. 3 Monate zum Quartalsende) und Verlängerungsklausel.

2. Physische Geräteausgabe & Zustandsprotokoll (Rental Check-Out)

Bei Mietgeräten (rental) ist der Zustand vor Überlassung entscheidend:

  • Gerätedisposition: Das System prüft die Verfügbarkeit im Mietgerätepool (assets).
  • Übergabeprotokoll: Bei Abholung oder Lieferung erfasst der Disponent:
    • Seriennummer und Zählerstand (Betriebsstunden, Kilometer).
    • Vorhandene Gebrauchsspuren und Vorschäden (mit Foto-Upload).
    • Ausgegebenes Zubehör (Kabel, Koffer, Adapter).
  • Digitale Kundensignatur: Der Mieter unterzeichnet das Übergabeprotokoll (cap:rental.rental_order.checkout). Der Gerätestatus wechselt auf Vermietet (rented).
  • Kautionserfassung: Eine vereinbarte Kaution wird bar, per Kreditkartenautorisierung oder Banküberweisung vereinnahmt.

3. Zyklischer Abrechnungslauf (Recurring Billing Engine)

Dauerschuldverhältnisse erfordern pünktliche periodische Rechnungen:

  • Automatischer Abrechnungsscan: Am vereinbarten Stichtag (z.B. monatlich im Voraus am 1. des Monats) scannt die Recurring-Billing-Engine alle abrechenbaren Verträge.
  • Fakturierung: Über cap:contracts.contract.generate_period_invoice wird automatisch die Ausgangsrechnung im Rechnungsmodul (invoices) erzeugt, als E-Rechnung bereitgestellt und per E-Mail an den Kunden versandt.
  • Variable Verbrauchsabrechnung: Bei Maschinen mit Betriebsstundenerfassung werden zusätzlich zur Grundmiete die Mehrstunden nach Zählerstand abgerechnet.

4. Fristenüberwachung, Kündigung & automatische Verlängerung

  • Proaktive Fristenwarnung: Das System scannt kontinuierlich die Kündigungsstichtage. 60 Tage vor dem letztmöglichen Kündigungstermin generiert das System eine Vertriebsaufgabe (crm): Vertragsverlängerung verhandeln.
  • Kündigungseingang: Kündigt der Kunde fristgerecht, wird das Kündigungsdatum hinterlegt; das Vertragsende wird festgeschrieben (cap:contracts.contract.terminate).
  • Automatische Verlängerung (Rollover): Geht keine Kündigung ein, verlängert sich der Vertrag automatisch um die vereinbarte Periode (z.B. weitere 12 Monate).

5. Geräterücknahme & Endabrechnung (Rental Check-In)

Nach Ablauf der Mietzeit kehrt das Gerät zurück:

  • Rücknahmeprüfung: Über cap:rental.rental_order.checkin werden Betriebsstunden und Gerätezustand dokumentiert.
  • Schadensabwicklung: Werden Neuschäden festgestellt (z.B. Beschädigung am Gehäuse, fehlendes Zubehör), erstellt das System ein Schadensprotokoll und hält die Kaution ein.
  • Endabrechnung: Das System verrechnet die Mietdauer, Zusatzstunden, Endreinigungspauschale und Kautionsguthaben zu einer finalen Abrechnung. Das Gerät wechselt zur Wartung oder Reinigung, bevor es wieder für die Vermietung freigegeben wird.
🏛️

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

Meta-Fachlogik: Die ideologische Blaupause & das normative Weltbild

Die Meta-Fachlogik basiert auf dem Recht der Dauerschuldverhältnisse (BGB §§ 314, 535 ff.), dem Gesetz für faire Verbraucherverträge und Grundsätzen des Subskriptionsmanagements.

1. Rechtliche Grundlagen der Vermietung & Dauerschuldverhältnisse

  • Mietvertrag (§ 535 BGB): Verpflichtung zur Gebrauchsüberlassung in vertragsgemäßem Zustand; Pflicht des Mieters zur Entrichtung der vereinbarten Miete.
  • Zustandsdokumentation & Beweislast: Ohne detailliertes Übergabeprotokoll mit Kundensignatur kann der Vermieter bei Rückgabe entstandene Schäden rechtlich kaum beweisen. Das Soll-Modell erzwingt daher das beidseitig gezeichnete Zustandsprotokoll bei Ausgabe und Rücknahme.
  • Kündigungsfristen (§§ 309, 580a BGB): Gesetzliche Begrenzung automatischer Verlängerungsklauseln im B2C (max. Verlängerung auf unbestimmte Zeit mit 1-Monats-Kündigungsfrist); im B2B sind feste Verlängerungsperioden (z.B. 12 Monate) bei klarer Vereinbarung zulässig.

2. Invarianten des Soll-Modells

  1. Keine Gerätemietübergabe ohne signiertes Übergabeprotokoll.
  2. Keine Doppelabrechnung derselben Periode (strikter Idempotenz-Schutz beim Abrechnungslauf).
  3. Ein gekündigter Vertrag darf nach Vertragsende keine automatischen Folgeabrechnungen mehr auslösen.
  4. Kautionsguthaben müssen buchhalterisch getrennt als Fremdgeld geführt und bei Mängelfreiheit unverzüglich erstattet werden.

Normbezug für rental

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:

  • iso-9001-2026, ISO 9001:2026 Quality management systems — Requirements, Ausgabe ISO 9001:2026 (6. Ausgabe, 2026-09-16). Art: normative. Volltext liegt nicht vor. Keine Klauselprüfung. Keine modulspezifische Kataloganforderung. Die Zuordnung bleibt eine Prüfreferenz.

Im Auditauftrag zusätzlich genannt und nicht im Prüfkatalog v2026.10.1: ISO 55001, IFRS 16. 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 contracts und rental.

1. Datenmodelle & Semantische Schicht (ORM)

  • Contract: Vertragskopf (Felder: id, tenant_id, contract_number, customer_id, contract_type, start_date, end_date, notice_period_months, billing_cycle [monthly, quarterly, yearly], recurring_amount, status).
  • ContractLine: Vertragspositionen und Serviceleistungen.
  • RentalOrder: Mietvorgang (Felder: id, order_number, customer_id, asset_id, start_date, end_date, daily_rate, deposit_amount, checkout_status, checkin_status).
  • RentalInspection: Protokoll der Aus- und Rückgabe mit Fotos, Betriebsstunden und Unterschrift.

2. Das Capability-Register

  • cap:contracts.contract.create: Neuanlage eines Vertrags.
  • cap:contracts.contract.generate_period_invoice: Erzeugung der zyklischen Rechnung für eine Periode.
  • cap:contracts.contract.terminate: Erfassung einer ordentlichen oder außerordentlichen Kündigung.
  • cap:rental.rental_order.checkout: Ausgabe des Mietgeräts mit Übergabeprotokoll.
  • cap:rental.rental_order.checkin: Rücknahme des Mietgeräts mit Schadensprüfung.
  • cap:rental.rental_order.reconcile_deposit: Abrechnung und Rückerstattung der Kaution.

3. Der Gateway gw:rental_checkout@v1 und gw:contract_billing@v1

  • gw:rental_checkout@v1: Prüft Kautionsstellung, Gerätezustand und Kundensignatur vor Freigabe.
  • gw:contract_billing@v1: Garantiert, dass jede Abrechnungsperiode pro Vertrag genau einmal abgerechnet wird.

4. Statusmodelle

  • Vertrag: draft ➔ active ➔ notice_given (Gekündigt) ➔ expired (Beendet) oder terminated.
  • Mietgerät: available ➔ reserved ➔ rented ➔ returned_inspection ➔ cleaning_maintenance.
🤖

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 Einrichtung von Vertrags- und Mietmodellen.

1. Kundenanforderungsanalyse

  • Welche Abrechnungszyklen nutzt das Unternehmen (Monatsanfang, Monatsende, Quartal)?
  • Werden Kautionen erhoben und wie erfolgt die Rückabwicklung?
  • Welche Zählerstände (Betriebsstunden, Impulse, Seiten) fließen in variable Gebühren ein?

2. No-Code Zusatzfelder (Custom Fields)

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

  • Auf Contract:
    • sla_response_time_hours (Ganzzahl): Garantierte Entstörzeit in Stunden.
    • indexation_clause (Auswahlliste: Ohne, Verbraucherpreisindex VPI, 3% jährlich): Für automatische Preisanpassungen.
  • Auf RentalOrder:
    • fuel_level_at_checkout (Auswahlliste: Voll, 3/4, 1/2, 1/4, Leer): Vermeidet Streitigkeiten bei Kraftstoffrückgabe.

3. No-Code Workflow Canvas DAGs

Blueprint A: Zyklischer Abrechnungslauf am Monatsersten
  • Trigger-Node: Scheduled Cron (0 2 1 * *) – Monatlich um 02:00 Uhr.
  • Condition-Node: contract.status == 'active' AND contract.next_billing_date <= current_date.
  • Action-Node: Rufe cap:contracts.contract.generate_period_invoice auf und sende E-Rechnung an Kunden.
Blueprint B: Fristenwächter 60 Tage vor Kündigungsstichtag
  • Trigger-Node: Täglicher Fristenscan.
  • Condition-Node: contract.notice_deadline_date - current_date == 60_days.
  • Action-Node: Erzeuge CRM-Opportunity: Vertragsverlängerung & Upselling verhandeln mit Zuweisung an Account Manager.

📚 Operative Prozessbegriffe & Transaktionsschnittstellen

Zentrale Fachbegriffe im Prozesszusammenhang (Operatives Modell)
Dauerschuldverhältnis
Langfristiger Vertrag mit fortlaufender Leistungserbringung und periodischer Abrechnung.
Mietgeräte-Check-In/Out
Strukturierte physische Ausgabe und Rücknahme von Investitionsgütern mit Zustandsprotokoll.
Kautionsverwaltung
Treuhänderische Verwahrung von Sicherheitsleistungen und deren Endabrechnung.
Kündigungsstichtag
Letzter Tag, an dem eine Kündigung zugehen muss, um eine automatische Verlängerung abzuwenden.
Recurring Billing
Vollautomatisierte Erzeugung zyklischer Abonnement- und Mietrechnungen.
📥 Eingänge & Trigger (Inputs)
  • Angenommenes Miet- oder Serviceangebot aus dem Quotes-Modul
  • Zyklische Kalender-Trigger für periodische Abrechnungsläufe
  • Kündigungsschreiben von Kunden per Post oder E-Mail
  • Geräterücklieferung an den Mietstützpunkt
📤 Ausgänge & Arbeitsergebnisse (Outputs)
  • Periodische Ausgangsrechnungen für Mieten und Servicegebühren
  • Rechtssichere Übergabe- und Rücknahmeprotokolle mit Kundensignatur
  • Kautionsabrechnungen und Rücküberweisungsbelege
  • Fristen- und Kündigungsberichte für das Vertriebscontrolling
⚡ Kaskaden & Folgeprozesse (Cascades)
  • checkout_completed -> asset_status_rented: Sperrung des Geräts für andere Mieter
  • billing_cycle_triggered -> invoice_created: Automatischer Rechnungsversand am Monatsersten
  • contract_terminated -> schedule_decommissioning: Planung der Vertragsbeendigung
  • damage_detected_at_checkin -> retain_deposit: Einbehalt der Kaution und Schadensrechnung
🛡️ Nebenprozesse & Resilienz
  • Schadensregulierung bei Beschädigung oder Verlust von Mietgeräten
  • Vertragsanpassungen und Preiserhöhungen nach Verbraucherpreisindex
  • Wartungs- und UVV-Prüfung von Mietgeräten zwischen zwei Vermietungen
  • Mahnwesen bei Zahlungsverzug von Mietkunden mit Gerätesperre
💡 No-Code Checkliste & Praxistipps
  • Standard-Kündigungsfristen und Verlängerungsperioden je Vertragskategorie konfigurieren
  • Kautionshöhen in Abhängigkeit vom Neuwert der Mietgeräte staffeln
  • Prüflisten für Geräteausgabe (Sauberkeit, Zubehör, Tank) im System hinterlegen
  • No-Code Zusatzfelder für SLA-Reaktionszeiten und Wertsicherungsklauseln anlegen

🗄️ Data Models & Fields

RentalBookings rental_bookings RLS Aktiv
59 Fields / Columns

Tabelle rental_bookings

Feldname Data Type Required Schlüssel Functional Meaning
booking_number VARCHAR(32) Ja * - Feld booking_number
status VARCHAR(48) Ja * - Feld status
rental_order_id UUID Nein FK ➔ rental_orders.id Feld rental_order_id
asset_id UUID Nein FK ➔ assets.id Feld asset_id
product_id UUID Nein FK ➔ products.id Feld product_id
quantity NUMERIC(14, 4) Ja * - Feld quantity
customer_id UUID Ja * FK ➔ customers.id Feld customer_id
contract_id UUID Nein FK ➔ contracts.id Feld contract_id
project_id UUID Nein FK ➔ projects.id Feld project_id
work_order_id UUID Nein FK ➔ work_orders.id Feld work_order_id
quote_id UUID Nein FK ➔ quotes.id Feld quote_id
invoice_id UUID Nein FK ➔ invoices.id Feld invoice_id
rate_card_id UUID Nein FK ➔ rental_rate_cards.id Feld rate_card_id
kit_group_id UUID Nein - Feld kit_group_id
billing_cycle_days INTEGER Nein - Feld billing_cycle_days
cycle_billed_through DATETIME Nein - Feld cycle_billed_through
cycle_invoice_ids JSONB Ja * - Feld cycle_invoice_ids
rental_start DATETIME Ja * - Feld rental_start
rental_end DATETIME Ja * - Feld rental_end
actual_pickup_at DATETIME Nein - Feld actual_pickup_at
actual_return_at DATETIME Nein - Feld actual_return_at
pickup_location_id UUID Nein FK ➔ locations.id Feld pickup_location_id
return_location_id UUID Nein FK ➔ locations.id Feld return_location_id
pickup_movement_id UUID Nein FK ➔ stock_movements.id Feld pickup_movement_id
return_movement_id UUID Nein FK ➔ stock_movements.id Feld return_movement_id
return_order_id UUID Nein FK ➔ return_orders.id Feld return_order_id
rate_amount NUMERIC(14, 2) Nein - Feld rate_amount
rate_unit VARCHAR(48) Ja * - Feld rate_unit
deposit_amount NUMERIC(14, 2) Nein - Feld deposit_amount
deposit_status VARCHAR(48) Ja * - Feld deposit_status
deposit_collected_at DATETIME Nein - Feld deposit_collected_at
deposit_applied_amount NUMERIC(14, 2) Nein - Feld deposit_applied_amount
deposit_refunded_amount NUMERIC(14, 2) Nein - Feld deposit_refunded_amount
deposit_notes TEXT Nein - Feld deposit_notes
deposit_invoice_id UUID Nein FK ➔ invoices.id Feld deposit_invoice_id
deposit_payment_id UUID Nein FK ➔ payments.id Feld deposit_payment_id
deposit_psp_provider VARCHAR(16) Nein - Feld deposit_psp_provider
deposit_psp_session_id VARCHAR(255) Nein - Feld deposit_psp_session_id
condition_notes_out TEXT Nein - Feld condition_notes_out
condition_notes_in TEXT Nein - Feld condition_notes_in
damage_notes TEXT Nein - Feld damage_notes
meter_out NUMERIC(14, 2) Nein - Feld meter_out
meter_in NUMERIC(14, 2) Nein - Feld meter_in
inspection_checklist JSONB Ja * - Feld inspection_checklist
return_photo_document_ids JSONB Ja * - Feld return_photo_document_ids
damage_charge_amount NUMERIC(14, 2) Nein - Feld damage_charge_amount
pickup_signature_document_id UUID Nein FK ➔ documents.id Feld pickup_signature_document_id
return_signature_document_id UUID Nein FK ➔ documents.id Feld return_signature_document_id
notes TEXT Nein - Feld notes
idempotency_key VARCHAR(128) Nein - Feld idempotency_key
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
RentalOrders rental_orders RLS Aktiv
21 Fields / Columns

Tabelle rental_orders

Feldname Data Type Required Schlüssel Functional Meaning
order_number VARCHAR(32) Ja * - Feld order_number
status VARCHAR(48) Ja * - Feld status
source VARCHAR(48) Ja * - Feld source
customer_id UUID Ja * FK ➔ customers.id Feld customer_id
contract_id UUID Nein FK ➔ contracts.id Feld contract_id
quote_id UUID Nein FK ➔ quotes.id Feld quote_id
project_id UUID Nein FK ➔ projects.id Feld project_id
product_id UUID Nein FK ➔ products.id Feld product_id
rental_start DATETIME Ja * - Feld rental_start
rental_end DATETIME Ja * - Feld rental_end
notes TEXT Nein - Feld notes
idempotency_key VARCHAR(128) Nein - Feld idempotency_key
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
RentalRateCards rental_rate_cards RLS Aktiv
19 Fields / Columns

Tabelle rental_rate_cards

Feldname Data Type Required Schlüssel Functional Meaning
code VARCHAR(64) Ja * - Feld code
name VARCHAR(200) Ja * - Feld name
asset_id UUID Nein FK ➔ assets.id Feld asset_id
rate_amount NUMERIC(14, 2) Ja * - Feld rate_amount
rate_unit VARCHAR(48) Ja * - Feld rate_unit
deposit_amount NUMERIC(14, 2) Nein - Feld deposit_amount
billing_cycle_days INTEGER Nein - Feld billing_cycle_days
currency VARCHAR(3) Ja * - Feld currency
is_active BOOLEAN Ja * - Feld is_active
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

🔌 Entry Points (UI & APIs)

Art Method Endpoint / Path Titel & Zweck Required Role
⚡ REST API GET /api/v1/rental/availability
check_availability
Semantic binding: inventory_only; mutation=False
rental
⚡ REST API GET /api/v1/rental/availability/product
check_product_availability
Semantic binding: inventory_only; mutation=False
rental
⚡ REST API GET /api/v1/rental/bookings
list_bookings
Semantic binding: inventory_only; mutation=False
rental
⚡ REST API GET /api/v1/rental/bookings/{booking_id}
get_booking
Semantic binding: inventory_only; mutation=False
rental
⚡ REST API GET /api/v1/rental/bookings/{booking_id}/charge-preview
booking_charge_preview
Semantic binding: inventory_only; mutation=False
rental
⚡ REST API GET /api/v1/rental/bookings/{booking_id}/kit
list_kit_members
Semantic binding: inventory_only; mutation=False
rental
⚡ REST API GET /api/v1/rental/orders
list_orders
Semantic binding: inventory_only; mutation=False
rental
⚡ REST API GET /api/v1/rental/orders/{order_id}
get_order
Semantic binding: inventory_only; mutation=False
rental
⚡ REST API GET /api/v1/rental/orders/{order_id}/bookings
list_order_bookings
Semantic binding: inventory_only; mutation=False
rental
⚡ REST API GET /api/v1/rental/products/rentable
list_rentable_products
Semantic binding: inventory_only; mutation=False
rental
⚡ REST API GET /api/v1/rental/rate-cards
list_rate_cards
Semantic binding: inventory_only; mutation=False
rental
⚡ REST API GET /api/v1/rental/rate-cards/resolve
resolve_rate_card
Semantic binding: inventory_only; mutation=False
rental
⚡ REST API GET /api/v1/rental/settings
get_rental_settings
Semantic binding: inventory_only; mutation=False
rental
⚡ REST API GET /api/v1/rental/utilisation
rental_utilisation
Semantic binding: inventory_only; mutation=False
rental
⚡ REST API GET /portal/{slug}/vermietung
rental_page
Semantic binding: inventory_only; mutation=False
rental
⚡ REST API GET /rental
rental_page
Semantic binding: inventory_only; mutation=False
rental
⚡ REST API GET /rental/new
rental_create_page
Semantic binding: inventory_only; mutation=False
rental
⚡ REST API PATCH /api/v1/rental/rate-cards/{rate_card_id}
update_rate_card
Semantic binding: operator_surface; mutation=True
rental
⚡ REST API POST /api/v1/rental/bookings
create_booking
Semantic binding: operator_surface; mutation=True
rental
⚡ REST API POST /api/v1/rental/bookings/kit
create_kit_booking
Semantic binding: operator_surface; mutation=True
rental
⚡ REST API POST /api/v1/rental/bookings/{booking_id}/cancel
cancel_booking
Semantic binding: operator_surface; mutation=True
rental
⚡ REST API POST /api/v1/rental/bookings/{booking_id}/create-invoice
create_hire_invoice
Semantic binding: operator_surface; mutation=True
rental
⚡ REST API POST /api/v1/rental/bookings/{booking_id}/cycle-invoice
create_cycle_invoice
Semantic binding: operator_surface; mutation=True
rental
⚡ REST API POST /api/v1/rental/bookings/{booking_id}/deposit/apply
apply_deposit
Semantic binding: operator_surface; mutation=True
rental
⚡ REST API POST /api/v1/rental/bookings/{booking_id}/deposit/checkout
start_deposit_checkout
Semantic binding: operator_surface; mutation=True
rental
⚡ REST API POST /api/v1/rental/bookings/{booking_id}/deposit/collect
collect_deposit
Semantic binding: operator_surface; mutation=True
rental
⚡ REST API POST /api/v1/rental/bookings/{booking_id}/deposit/invoice
create_deposit_invoice
Semantic binding: operator_surface; mutation=True
rental
⚡ REST API POST /api/v1/rental/bookings/{booking_id}/deposit/refund
refund_deposit
Semantic binding: operator_surface; mutation=True
rental
⚡ REST API POST /api/v1/rental/bookings/{booking_id}/early-return
early_return_booking
Semantic binding: operator_surface; mutation=True
rental
⚡ REST API POST /api/v1/rental/bookings/{booking_id}/extend
extend_booking
Semantic binding: operator_surface; mutation=True
rental
⚡ REST API POST /api/v1/rental/bookings/{booking_id}/pickup
pickup_booking
Semantic binding: operator_surface; mutation=True
rental
⚡ REST API POST /api/v1/rental/bookings/{booking_id}/reschedule
reschedule_booking
Semantic binding: operator_surface; mutation=True
rental
⚡ REST API POST /api/v1/rental/bookings/{booking_id}/return
return_booking
Semantic binding: operator_surface; mutation=True
rental
⚡ REST API POST /api/v1/rental/bookings/{booking_id}/swap-asset
swap_booking_asset
Semantic binding: operator_surface; mutation=True
rental
⚡ REST API POST /api/v1/rental/orders
create_order
Semantic binding: operator_surface; mutation=True
rental
⚡ REST API POST /api/v1/rental/orders/from-contract/{contract_id}
create_order_from_contract
Semantic binding: operator_surface; mutation=True
rental
⚡ REST API POST /api/v1/rental/orders/from-product
create_order_from_product
Semantic binding: operator_surface; mutation=True
rental
⚡ REST API POST /api/v1/rental/rate-cards
create_rate_card
Semantic binding: operator_surface; mutation=True
rental
⚡ REST API POST /portal/{slug}/vermietung/anfragen
rental_booking_request
Semantic binding: operator_surface; mutation=True
rental
⚡ REST API PUT /api/v1/rental/settings
update_rental_settings
Semantic binding: operator_surface; mutation=True
rental

🛡️ Regulatory & Compliance

Dieses Modul unterliegt folgenden gesetzlichen, regulatorischen und Revisionsstandards:

  • GoBD Nachvollziehbarkeit
  • Mandanten-Isolation (PostgreSQL RLS)