Centurio System- & Moduldokumentation
🏛️ Plattform-Architektur 🔑 Login
🏠 Alle Module / sales_billing / Verkauf & Kundenaufträge
🛒

Verkauf & Kundenaufträge

sales sales_billing 🛡️ RLS Protected

Handelsorientierte Verkaufsaufträge: Angebot übernehmen, bestätigen, liefern, fakturieren - ohne Außendienst-/Werkstatt-Kopplung.

Fachliche Bestimmung: Verkaufsmodul für Handels- und Handelsnahe Mandanten. Technisch auf der gemeinsamen Auftragsentität implementiert (order_type='sale'), bewusst entkoppelt vom Außendienst-Kontext: keine Einsätze, keine Monteurszuordnung, kein Ausführungsort. Stattdessen die Odoo-Sales-Pipeline Entwurf -> Bestätigt -> In Lieferung -> Geliefert -> Fakturiert mit Kundenreferenz, Zahlungsbedingungen, Skonto, Liefertermin und Abrechnungsregel (nach Bestellung / nach Lieferung). Mutationen laufen über journaled Engine-Facades (sales_order_confirm, sales_order_delivery, sales_order_from_quote, sales_order_cancel, sales_order_invoice) mit Kontext-Bundle-Evidence und Idempotenz über WorkflowRun.

⚡ Workflows & Lebenszyklen

Verkaufs-Pipeline (Quote-to-Cash) sales_order_pipeline

Vom Angebot oder der Direktanlage über Bestätigung und Lieferung zur Rechnung.

stateDiagram-v2 [*] --> DRAFT: Anlegen / aus Angebot DRAFT --> CONFIRMED: Bestätigen CONFIRMED --> IN_DELIVERY: Lieferung starten IN_DELIVERY --> DELIVERED: Als geliefert markieren DELIVERED --> INVOICED: Rechnung erstellen DRAFT --> CANCELLED: Stornieren
1. DRAFT
Entwurf
Auftrag wird angelegt oder aus einem Angebot übernommen (idempotent).
Aktionen: Positionen pflegen, Zahlungsbedingungen setzen
2. CONFIRMED
Bestätigt
Auftrag bestätigt (scheduled), Liefertermin verbindlich.
Aktionen: Lieferung starten
3. IN_DELIVERY
In Lieferung
Ware wird kommissioniert/ausgeliefert (Lager-Integration).
Aktionen: Als geliefert markieren
4. DELIVERED
Geliefert
Liefermengen gebucht; bei Abrechnungsregel 'delivered' Fakturierungsbasis.
Aktionen: Rechnung erstellen
5. INVOICED
Fakturiert
Rechnungsentwurf aus Auftrag (regulär, Anzahlung, Sammelrechnung).

🗄️ Datenmodelle & Felder

DropshipLines dropship_lines RLS Aktiv
37 Felder / Spalten

Tabelle dropship_lines

Feldname Datentyp Pflicht Schlüssel Fachliche Bedeutung
item_type VARCHAR(24) Ja * - Feld item_type
item_id UUID Ja * - Feld item_id
quote_id UUID Nein FK ➔ quotes.id Feld quote_id
work_order_id UUID Nein FK ➔ work_orders.id Feld work_order_id
project_id UUID Nein FK ➔ projects.id Feld project_id
customer_id UUID Nein FK ➔ customers.id Feld customer_id
product_id UUID Nein FK ➔ products.id Feld product_id
description VARCHAR(255) Ja * - Feld description
quantity NUMERIC(14, 4) Ja * - Feld quantity
unit VARCHAR(16) Ja * - Feld unit
sales_net NUMERIC(14, 2) Ja * - Feld sales_net
supplier_id UUID Nein FK ➔ suppliers.id Feld supplier_id
purchase_id UUID Nein FK ➔ purchases.id Feld purchase_id
purchase_item_id UUID Nein FK ➔ purchase_items.id Feld purchase_item_id
cost_net NUMERIC(14, 2) Nein - Feld cost_net
ship_to TEXT Nein - Feld ship_to
status VARCHAR(16) Ja * - Feld status
carrier VARCHAR(120) Nein - Feld carrier
tracking_number VARCHAR(120) Nein - Feld tracking_number
tracking_url VARCHAR(512) Nein - Feld tracking_url
expected_delivery_date DATE Nein - Feld expected_delivery_date
shipped_at DATETIME Nein - Feld shipped_at
delivered_at DATETIME Nein - Feld delivered_at
proof_document_id UUID Nein FK ➔ documents.id Feld proof_document_id
billing_released BOOLEAN Ja * - Feld billing_released
release_reason VARCHAR(255) Nein - Feld release_reason
chain_review BOOLEAN Ja * - Feld chain_review
issue_note VARCHAR(500) Nein - Feld issue_note
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
SalesAgents sales_agents RLS Aktiv
18 Felder / Spalten

Tabelle sales_agents

Feldname Datentyp Pflicht Schlüssel Fachliche Bedeutung
name VARCHAR(255) Ja * - Feld name
email VARCHAR(320) Nein - Feld email
phone VARCHAR(64) Nein - Feld phone
customer_id UUID Nein FK ➔ customers.id Feld customer_id
supplier_id UUID Nein FK ➔ suppliers.id Feld supplier_id
default_commission_percent NUMERIC(5, 2) Nein - Feld default_commission_percent
default_markup_percent NUMERIC(5, 2) Nein - Feld default_markup_percent
notes TEXT Nein - Feld notes
active BOOLEAN Ja * - Feld active
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

🔌 Einstiegspunkte (UI & APIs)

Art Methode Endpunkt / Pfad Titel & Zweck Berechtigung
⚡ REST API DELETE /api/v1/sales/orders/{order_id}/items/{item_id}
delete_item
Semantic binding: not_evaluated; mutation=True
sales
⚡ REST API GET /api/v1/sales/orders
list_sales_orders
Semantic binding: not_evaluated; mutation=False
sales
⚡ REST API GET /api/v1/sales/orders/{order_id}
get_sales_order
Semantic binding: not_evaluated; mutation=False
sales
⚡ REST API GET /api/v1/sales/summary
sales_summary
Semantic binding: not_evaluated; mutation=False
sales
⚡ REST API GET /portal/{slug}/bestellung
order_form
Semantic binding: not_evaluated; mutation=False
sales
⚡ REST API GET /verkauf
sales_page
Semantic binding: not_evaluated; mutation=False
sales
⚡ REST API GET /verkauf/{order_id}
sales_order_page
Semantic binding: not_evaluated; mutation=False
sales
⚡ REST API PATCH /api/v1/sales/orders/{order_id}
update_sales_order
Semantic binding: not_evaluated; mutation=True
sales
⚡ REST API PATCH /api/v1/sales/orders/{order_id}/items/{item_id}
update_item
Semantic binding: not_evaluated; mutation=True
sales
⚡ REST API POST /api/v1/sales/orders
create_sales_order
Semantic binding: not_evaluated; mutation=True
sales
⚡ REST API POST /api/v1/sales/orders/from-quote/{quote_id}
create_from_quote
Semantic binding: not_evaluated; mutation=True
sales
⚡ REST API POST /api/v1/sales/orders/{order_id}/cancel
cancel_sales_order
Semantic binding: not_evaluated; mutation=True
sales
⚡ REST API POST /api/v1/sales/orders/{order_id}/confirm
confirm_sales_order
Semantic binding: not_evaluated; mutation=True
sales
⚡ REST API POST /api/v1/sales/orders/{order_id}/invoice
invoice_sales_order
Semantic binding: not_evaluated; mutation=True
sales
⚡ REST API POST /api/v1/sales/orders/{order_id}/items
add_item
Semantic binding: not_evaluated; mutation=True
sales
⚡ REST API POST /api/v1/sales/orders/{order_id}/mark-delivered
mark_delivered
Semantic binding: not_evaluated; mutation=True
sales
⚡ REST API POST /api/v1/sales/orders/{order_id}/start-delivery
start_delivery
Semantic binding: not_evaluated; mutation=True
sales
⚡ REST API POST /portal/{slug}/bestellung
order_submit
Semantic binding: not_evaluated; mutation=True
sales
🖥️ WEB-UI GET /quotes?status=dropship
Strecken-Filter Angebote
Filtert Angebote mit Streckengeschäft-Positionen
quotes:read
🖥️ WEB-UI GET /purchasing#dropship
Streckengeschäft Einkauf
Dedizierter Einkaufs-Reiter mit Kennzahlen und Tracking
purchasing:read
⚡ REST API GET /api/v1/dropshipping
Streckenpositionen API
Liefert Streckengeschäft-Positionen mit Lieferanten- und Belegdaten
quotes:read
⚡ REST API POST /api/v1/dropshipping/{id}/assign-supplier
Lieferant zuweisen
Weist Lieferant zu und erzeugt Einkaufsbestellung
purchasing:write
⚡ REST API POST /api/v1/dropshipping/{id}/tracking
Tracking hinterlegen
Trägt Trackingnummer ein und setzt Status auf in_transit
purchasing:write
⚡ REST API POST /api/v1/dropshipping/{id}/delivered
Zustellung bestätigen
Setzt Status auf delivered und erteilt Rechnungsfreigabe
purchasing:write

🛡️ Regulatorik & Compliance

Standard GoBD- und DSGVO-Regelwerk.

Verknüpfte Module:
➔ quotes ➔ invoices ➔ customers ➔ inventory ➔ products ➔ contracts