Centurio System- & Moduldokumentation
🏛️ Plattform-Architektur 🔑 Login
🏠 Alle Module / supply_chain / Einkauf & Bestellungen
🛒

Einkauf & Bestellungen

purchasing supply_chain 🛡️ RLS Protected

Lieferantenbestellungen, Preisanfragen (RFQ), Wareneingangserfassung und 3-Wege-Rechnungsabgleich.

Fachliche Bestimmung: Steuert den gesamten Beschaffungsprozess. Erzeugt Bestellungen aus Buy-to-Order-Bedarfen, Streckengeschäften oder Mindestbestandsregeln. Unterstützt Wareneingangsbuchungen mit LVS-Übergabe und automatisiert den 3-Wege-Abgleich (Bestellung ➔ Wareneingang ➔ Eingangsrechnung).

⚡ Workflows & Lebenszyklen

Procure-to-Pay (P2P) Beschaffungszyklus procure_to_pay_lifecycle

Von der Bedarfsanforderung über die Lieferantenbestellung bis zum Wareneingang.

graph LR A[Bedarfsanforderung / BTO] --> B[Bestellung an Lieferant] B --> C[Wareneingang & Prüfung] C --> D[LVS-Lagerzubuchung] D --> E[3-Wege-Rechnungsprüfung]
1. RFQ
Preisanfrage
Anfrage bei einem oder mehreren Lieferanten.
Aktionen: Angebote vergleichen
2. ORDER
Bestellung
Verbindliche Bestellung auslösen.
Aktionen: PO-Beleg generieren
3. RECEIPT
Wareneingang
Eintreffen der Ware erfassen und Menge/Qualität prüfen.
Aktionen: LVS-Bestand zubuchen
4. INVOICE_MATCH
Rechnungsabgleich
3-Wege-Abgleich gegen Einkaufsrechnung.
Aktionen: Zur Zahlung freigeben

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

Auftragsbestätigung ↔ Bestellung abgleichen cascade_target:business.order_confirmation.match

Kaskade (review_gated).

1. cascade
Auftragsbestätigung ↔ Bestellung abgleichen

Benutzerbefehl: goods receipt agent plan:command_goods_receipt_agent

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

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

Benutzerbefehl: procurement coordinator agent plan:command_procurement_coordinator_agent

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

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

Benutzerbefehl: procurement rule function agent plan:command_procurement_rule_function_agent

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

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

Benutzerbefehl: procurement run function agent plan:command_procurement_run_function_agent

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

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

Benutzerbefehl: purchase agent plan:command_purchase_agent

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

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

Benutzerbefehl: three way match agent plan:command_three_way_match_agent

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

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

Wareneingang gebucht plan:goods_receipt_followup

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

1. three_way_match_agent
three_way_match_agent
{"key": "step_0", "label": "Bestellung, Wareneingang und Rechnung abgleichen", "adapter": "agent.execute", "agent": "three_way_match_agent", "condition_fact": null}
Aktionen: three_way_match_agent

Dropship status:dropship_line

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

1. needs_supplier
needs_supplier
Status «needs_supplier» der Zustandsmaschine Dropship.
2. requested
requested
Status «requested» der Zustandsmaschine Dropship.
3. ordered
ordered
Status «ordered» der Zustandsmaschine Dropship.
4. confirmed
confirmed
Status «confirmed» der Zustandsmaschine Dropship.
5. shipped
shipped
Status «shipped» der Zustandsmaschine Dropship.
6. delivered
delivered
Status «delivered» der Zustandsmaschine Dropship.
7. issue
issue
Status «issue» der Zustandsmaschine Dropship.
8. cancelled
cancelled
Status «cancelled» der Zustandsmaschine Dropship.

Wareneingang status:goods_receipt

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

1. draft
draft
Status «draft» der Zustandsmaschine Wareneingang.
2. posted
posted
Status «posted» der Zustandsmaschine Wareneingang.
3. cancelled
cancelled
Status «cancelled» der Zustandsmaschine Wareneingang.

Bestellung status:purchase

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

1. draft
draft
Status «draft» der Zustandsmaschine Bestellung.
2. sent
sent
Status «sent» der Zustandsmaschine Bestellung.
3. partially_received
partially_received
Status «partially_received» der Zustandsmaschine Bestellung.
4. received
received
Status «received» der Zustandsmaschine Bestellung.
5. cancelled
cancelled
Status «cancelled» der Zustandsmaschine Bestellung.

Bestellanforderung status:purchase_requisition

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

1. draft
draft
Status «draft» der Zustandsmaschine Bestellanforderung.
2. submitted
submitted
Status «submitted» der Zustandsmaschine Bestellanforderung.
3. approved
approved
Status «approved» der Zustandsmaschine Bestellanforderung.
4. rejected
rejected
Status «rejected» der Zustandsmaschine Bestellanforderung.
5. ordered
ordered
Status «ordered» der Zustandsmaschine Bestellanforderung.
6. cancelled
cancelled
Status «cancelled» der Zustandsmaschine Bestellanforderung.

Preisanfrage status:purchase_rfq

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

1. draft
draft
Status «draft» der Zustandsmaschine Preisanfrage.
2. sent
sent
Status «sent» der Zustandsmaschine Preisanfrage.
3. partially_quoted
partially_quoted
Status «partially_quoted» der Zustandsmaschine Preisanfrage.
4. quoted
quoted
Status «quoted» der Zustandsmaschine Preisanfrage.
5. ordered
ordered
Status «ordered» der Zustandsmaschine Preisanfrage.
6. cancelled
cancelled
Status «cancelled» der Zustandsmaschine Preisanfrage.

Lieferantenangebot status:supplier_quote

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

1. draft
draft
Status «draft» der Zustandsmaschine Lieferantenangebot.
2. received
received
Status «received» der Zustandsmaschine Lieferantenangebot.
3. accepted
accepted
Status «accepted» der Zustandsmaschine Lieferantenangebot.
4. rejected
rejected
Status «rejected» der Zustandsmaschine Lieferantenangebot.

🗄️ Datenmodelle & Felder

ProcurementNeeds procurement_needs RLS Aktiv
24 Felder / Spalten

Tabelle procurement_needs

Feldname Datentyp Pflicht Schlüssel Fachliche Bedeutung
run_id UUID Ja * FK ➔ procurement_runs.id Feld run_id
rule_id UUID Ja * FK ➔ reordering_rules.id Feld rule_id
product_id UUID Ja * FK ➔ products.id Feld product_id
location_id UUID Nein FK ➔ locations.id Feld location_id
supplier_info_id UUID Nein FK ➔ product_supplierinfo.id Feld supplier_info_id
physical_quantity NUMERIC(14, 4) Ja * - Feld physical_quantity
reserved_quantity NUMERIC(14, 4) Ja * - Feld reserved_quantity
incoming_quantity NUMERIC(14, 4) Ja * - Feld incoming_quantity
forecast_quantity NUMERIC(14, 4) Ja * - Feld forecast_quantity
requested_quantity NUMERIC(14, 4) Ja * - Feld requested_quantity
ordered_quantity NUMERIC(14, 4) Ja * - Feld ordered_quantity
status VARCHAR(48) Ja * - Feld status
purchase_id UUID Nein FK ➔ purchases.id Feld purchase_id
purchase_item_id UUID Nein FK ➔ purchase_items.id Feld purchase_item_id
explanation TEXT Ja * - Feld explanation
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
ProcurementRuns procurement_runs RLS Aktiv
16 Felder / Spalten

Tabelle procurement_runs

Feldname Datentyp Pflicht Schlüssel Fachliche Bedeutung
status VARCHAR(48) Ja * - Feld status
trigger VARCHAR(32) Ja * - Feld trigger
started_at DATETIME Ja * - Feld started_at
finished_at DATETIME Nein - Feld finished_at
idempotency_key VARCHAR(128) Nein - Feld idempotency_key
summary JSONB Ja * - Feld summary
error_message TEXT Nein - Feld error_message
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/purchasing/procurement/rules/{rule_id}
delete_reordering_rule
Semantic binding: not_evaluated; mutation=True
purchasing
⚡ REST API GET /api/v1/dropshipping
list_lines
Semantic binding: not_evaluated; mutation=False
purchasing
⚡ REST API GET /api/v1/dropshipping/meta
meta
Semantic binding: not_evaluated; mutation=False
purchasing
⚡ REST API GET /api/v1/purchasing/goods-receipts
list_receipts
Semantic binding: not_evaluated; mutation=False
purchasing
⚡ REST API GET /api/v1/purchasing/goods-receipts/{receipt_id}
get_receipt
Semantic binding: not_evaluated; mutation=False
purchasing
⚡ REST API GET /api/v1/purchasing/goods-receipts/{receipt_id}/labels.pdf
goods_receipt_labels_pdf
Semantic binding: not_evaluated; mutation=False
purchasing
⚡ REST API GET /api/v1/purchasing/goods-receipts/{receipt_id}/landed-costs
list_landed_costs
Semantic binding: not_evaluated; mutation=False
purchasing
⚡ REST API GET /api/v1/purchasing/procurement/rules
list_reordering_rules
Semantic binding: not_evaluated; mutation=False
purchasing
⚡ REST API GET /api/v1/purchasing/procurement/runs
list_procurement_runs
Semantic binding: not_evaluated; mutation=False
purchasing
⚡ REST API GET /api/v1/purchasing/procurement/runs/{run_id}/needs
list_procurement_needs
Semantic binding: not_evaluated; mutation=False
purchasing
⚡ REST API GET /api/v1/purchasing/purchases
list_purchases
Semantic binding: not_evaluated; mutation=False
purchasing
⚡ REST API GET /api/v1/purchasing/purchases/open
list_open_purchases
Semantic binding: not_evaluated; mutation=False
purchasing
⚡ REST API GET /api/v1/purchasing/purchases/{purchase_id}
get_purchase
Semantic binding: not_evaluated; mutation=False
purchasing
⚡ REST API GET /api/v1/purchasing/purchases/{purchase_id}/matching
get_purchase_matching
Semantic binding: not_evaluated; mutation=False
purchasing
⚡ REST API GET /api/v1/purchasing/purchases/{purchase_id}/pdf
get_purchase_pdf
Semantic binding: not_evaluated; mutation=False
purchasing
⚡ REST API GET /api/v1/purchasing/reports/supplier-scorecard
supplier_scorecard_report
Semantic binding: not_evaluated; mutation=False
purchasing
⚡ REST API GET /api/v1/purchasing/requisitions
list_purchase_requisitions
Semantic binding: not_evaluated; mutation=False
purchasing
⚡ REST API GET /api/v1/purchasing/requisitions/{requisition_id}
get_purchase_requisition
Semantic binding: not_evaluated; mutation=False
purchasing
⚡ REST API GET /api/v1/purchasing/rfqs
list_rfqs
Semantic binding: not_evaluated; mutation=False
purchasing
⚡ REST API GET /api/v1/purchasing/rfqs/{rfq_id}
get_rfq
Semantic binding: not_evaluated; mutation=False
purchasing
⚡ REST API GET /api/v1/purchasing/rfqs/{rfq_id}/compare
compare_rfq_quotes
Semantic binding: not_evaluated; mutation=False
purchasing
⚡ REST API GET /api/v1/purchasing/settings
get_purchasing_settings
Semantic binding: not_evaluated; mutation=False
purchasing
⚡ REST API GET /api/v1/purchasing/supplier-portal/purchases
list_purchases
Semantic binding: not_evaluated; mutation=False
purchasing
⚡ REST API GET /api/v1/purchasing/supplier-portal/rfqs
list_rfqs
Semantic binding: not_evaluated; mutation=False
purchasing
⚡ REST API GET /dropshipping
dropshipping_page
Semantic binding: not_evaluated; mutation=False
purchasing
⚡ REST API GET /purchasing
purchasing_page
Semantic binding: not_evaluated; mutation=False
purchasing
⚡ REST API GET /purchasing/new
purchase_create_page
Semantic binding: not_evaluated; mutation=False
purchasing
⚡ REST API GET /purchasing/orders/{purchase_id}
purchase_order_detail_page
Semantic binding: not_evaluated; mutation=False
purchasing
⚡ REST API GET /purchasing/receipts/{receipt_id}
goods_receipt_detail_page
Semantic binding: not_evaluated; mutation=False
purchasing
⚡ REST API GET /purchasing/tab/procurement
purchasing_tab_procurement
Semantic binding: not_evaluated; mutation=False
purchasing
⚡ REST API GET /purchasing/tab/purchases
purchasing_tab_purchases
Semantic binding: not_evaluated; mutation=False
purchasing
⚡ REST API GET /purchasing/tab/receipts
purchasing_tab_receipts
Semantic binding: not_evaluated; mutation=False
purchasing
⚡ REST API GET /purchasing/{purchase_id}
purchase_order_detail_page
Semantic binding: not_evaluated; mutation=False
purchasing
⚡ REST API GET /purchasing/{purchase_id}/pdf
purchase_order_pdf_view
Semantic binding: not_evaluated; mutation=False
purchasing
⚡ REST API PATCH /api/v1/purchasing/goods-receipts/{receipt_id}
update_receipt_draft
Semantic binding: not_evaluated; mutation=True
purchasing
⚡ REST API PATCH /api/v1/purchasing/goods-receipts/{receipt_id}/items/{item_id}/tracking
update_receipt_item_tracking
Semantic binding: not_evaluated; mutation=True
purchasing
⚡ REST API PATCH /api/v1/purchasing/procurement/rules/{rule_id}
update_reordering_rule
Semantic binding: not_evaluated; mutation=True
purchasing
⚡ REST API POST /api/v1/dropshipping/quotes/{quote_id}/create
create_for_quote
Semantic binding: not_evaluated; mutation=True
purchasing
⚡ REST API POST /api/v1/dropshipping/{line_id}/cancel
cancel
Semantic binding: not_evaluated; mutation=True
purchasing
⚡ REST API POST /api/v1/dropshipping/{line_id}/delivered
delivered
Semantic binding: not_evaluated; mutation=True
purchasing
⚡ REST API POST /api/v1/dropshipping/{line_id}/issue
issue
Semantic binding: not_evaluated; mutation=True
purchasing
⚡ REST API POST /api/v1/dropshipping/{line_id}/release-billing
release_billing
Semantic binding: not_evaluated; mutation=True
purchasing
⚡ REST API POST /api/v1/dropshipping/{line_id}/supplier
assign_supplier
Semantic binding: not_evaluated; mutation=True
purchasing
⚡ REST API POST /api/v1/dropshipping/{line_id}/tracking
tracking
Semantic binding: not_evaluated; mutation=True
purchasing
⚡ REST API POST /api/v1/purchasing/goods-receipts
create_receipt
Semantic binding: not_evaluated; mutation=True
purchasing
⚡ REST API POST /api/v1/purchasing/goods-receipts/{receipt_id}/landed-costs
create_landed_cost
Semantic binding: not_evaluated; mutation=True
purchasing
⚡ REST API POST /api/v1/purchasing/goods-receipts/{receipt_id}/post
post_receipt
Semantic binding: not_evaluated; mutation=True
purchasing
⚡ REST API POST /api/v1/purchasing/goods-receipts/{receipt_id}/print-labels
print_goods_receipt_labels
Semantic binding: not_evaluated; mutation=True
purchasing
⚡ REST API POST /api/v1/purchasing/procurement/rules
create_reordering_rule
Semantic binding: not_evaluated; mutation=True
purchasing
⚡ REST API POST /api/v1/purchasing/procurement/run
run_procurement
Semantic binding: not_evaluated; mutation=True
purchasing
⚡ REST API POST /api/v1/purchasing/purchases
create_purchase
Semantic binding: not_evaluated; mutation=True
purchasing
⚡ REST API POST /api/v1/purchasing/purchases/{purchase_id}/approve
approve_purchase
Semantic binding: not_evaluated; mutation=True
purchasing
⚡ REST API POST /api/v1/purchasing/purchases/{purchase_id}/confirm-supplier
confirm_purchase_supplier
Semantic binding: not_evaluated; mutation=True
purchasing
⚡ REST API POST /api/v1/purchasing/purchases/{purchase_id}/items
add_item_to_purchase
Semantic binding: not_evaluated; mutation=True
purchasing
⚡ REST API POST /api/v1/purchasing/purchases/{purchase_id}/receive
quick_receive_purchase
Semantic binding: not_evaluated; mutation=True
purchasing
⚡ REST API POST /api/v1/purchasing/purchases/{purchase_id}/send
send_purchase
Semantic binding: not_evaluated; mutation=True
purchasing
⚡ REST API POST /api/v1/purchasing/purchases/{purchase_id}/send-email
send_purchase_email
Semantic binding: not_evaluated; mutation=True
purchasing
⚡ REST API POST /api/v1/purchasing/purchases/{purchase_id}/tax-context
confirm_purchase_tax_context
Semantic binding: not_evaluated; mutation=True
purchasing
⚡ REST API POST /api/v1/purchasing/requisitions
create_purchase_requisition
Semantic binding: not_evaluated; mutation=True
purchasing
⚡ REST API POST /api/v1/purchasing/requisitions/{requisition_id}/approve
approve_purchase_requisition
Semantic binding: not_evaluated; mutation=True
purchasing
⚡ REST API POST /api/v1/purchasing/requisitions/{requisition_id}/convert-to-purchase
convert_purchase_requisition
Semantic binding: not_evaluated; mutation=True
purchasing
⚡ REST API POST /api/v1/purchasing/requisitions/{requisition_id}/reject
reject_purchase_requisition
Semantic binding: not_evaluated; mutation=True
purchasing
⚡ REST API POST /api/v1/purchasing/requisitions/{requisition_id}/submit
submit_purchase_requisition
Semantic binding: not_evaluated; mutation=True
purchasing
⚡ REST API POST /api/v1/purchasing/rfqs
create_rfq
Semantic binding: not_evaluated; mutation=True
purchasing
⚡ REST API POST /api/v1/purchasing/rfqs/{rfq_id}/quotes
record_supplier_quote
Semantic binding: not_evaluated; mutation=True
purchasing
⚡ REST API POST /api/v1/purchasing/rfqs/{rfq_id}/quotes/{quote_id}/purchase
create_purchase_from_quote
Semantic binding: not_evaluated; mutation=True
purchasing
⚡ REST API POST /api/v1/purchasing/rfqs/{rfq_id}/suppliers
add_rfq_supplier
Semantic binding: not_evaluated; mutation=True
purchasing
⚡ REST API POST /api/v1/purchasing/supplier-portal/invoices
upload_invoice
Semantic binding: not_evaluated; mutation=True
purchasing
⚡ REST API POST /api/v1/purchasing/supplier-portal/rfqs/{rfq_id}/respond
respond_rfq
Semantic binding: not_evaluated; mutation=True
purchasing
⚡ REST API POST /api/v1/purchasing/supplier-portal/suppliers/{supplier_id}/access-token
issue_access_token
Semantic binding: not_evaluated; mutation=True
purchasing
⚡ REST API POST /purchasing/settings/grouping
web_update_purchasing_grouping
Semantic binding: not_evaluated; mutation=True
purchasing
⚡ REST API PUT /api/v1/purchasing/settings
update_purchasing_settings
Semantic binding: not_evaluated; mutation=True
purchasing
⚡ REST API POST /api/v1/purchasing
Bestellung anlegen
Erzeugt neue Einkaufsbestellung
purchasing:write

🛡️ Regulatorik & Compliance

Dieses Modul unterliegt folgenden gesetzlichen, regulatorischen und Revisionsstandards:

  • GoBD Nachvollziehbarkeit
  • HGB §377 (Rügepflicht bei Wareneingang)
Verknüpfte Module:
➔ suppliers ➔ inventory ➔ dropship ➔ crossdock