{"openapi":"3.1.0","info":{"title":"Flow Procurement Platform","description":"REST API for multi-criteria order portfolio optimisation. Minimises a weighted combination of cost, lead-time, compliance risk, and ESG impact across pre-selected suppliers using HiGHS.\n\n**Modes:** continuous (LP) and binary (MIP).\n\n**Endpoints:**\n- `/api/v1/optimize` — core optimisation\n- `/api/v1/dashboard` — Pareto front + radar charts\n- `/api/v1/stealth` — raw solver diagnostics\n- `/api/v1/weights` — live weight tuning\n\n**Dashboard UI:** [`/ui`](/ui)","version":"2026.18.15.0"},"paths":{"/api/v1/optimize":{"post":{"tags":["optimization"],"summary":"Run order portfolio optimisation","description":"Solve the multi-criteria supplier allocation problem.\n\nModes:\n- **continuous** — LP relaxation via `scipy.optimize.linprog(method='highs')`.\n  Allocations are fractional (0..1). Vendor diversification enforced.\n- **mip** — Mixed-Integer (binary) via PuLP + HiGHS.\n  Exactly one supplier selected per product. Diversification as volume cap.","operationId":"optimize_api_v1_optimize_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OptimizationRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OptimizationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/optimize/demo":{"get":{"tags":["optimization"],"summary":"Run optimisation with demo data (any domain)","description":"Run optimisation on built-in demo dataset for any procurement domain.","operationId":"optimize_demo_api_v1_optimize_demo_get","parameters":[{"name":"domain","in":"query","required":false,"schema":{"$ref":"#/components/schemas/DemoDomain","default":"parts"}},{"name":"mode","in":"query","required":false,"schema":{"$ref":"#/components/schemas/SolverMode","default":"continuous"}},{"name":"lambda_param","in":"query","required":false,"schema":{"type":"number","default":0.5,"title":"Lambda Param"}},{"name":"max_vendor_share","in":"query","required":false,"schema":{"type":"number","default":0.6,"title":"Max Vendor Share"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OptimizationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/dashboard":{"post":{"tags":["dashboard"],"summary":"Generate Pareto front and supplier radar profiles","description":"**Dashboard endpoint** — generates:\n1. Pareto front by sweeping λ ∈ [0, 1].\n2. Supplier radar profiles (normalised cost/time/compliance/ESG).\n3. Current allocation at the requested λ.","operationId":"dashboard_api_v1_dashboard_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/dashboard/demo":{"get":{"tags":["dashboard"],"summary":"Dashboard with demo data (any domain)","description":"Convenience: dashboard with built-in demo data for any domain.","operationId":"dashboard_demo_api_v1_dashboard_demo_get","parameters":[{"name":"domain","in":"query","required":false,"schema":{"$ref":"#/components/schemas/DemoDomain","default":"parts"}},{"name":"lambda_param","in":"query","required":false,"schema":{"type":"number","default":0.5,"title":"Lambda Param"}},{"name":"mode","in":"query","required":false,"schema":{"$ref":"#/components/schemas/SolverMode","default":"continuous"}},{"name":"pareto_steps","in":"query","required":false,"schema":{"type":"integer","default":11,"title":"Pareto Steps"}},{"name":"max_vendor_share","in":"query","required":false,"schema":{"type":"number","default":0.6,"title":"Max Vendor Share"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/stealth":{"post":{"tags":["stealth"],"summary":"Stealth mode — raw solver diagnostics","description":"**Stealth Mode** — for analysts.\n\nReturns raw HiGHS solver log, decision variables, constraints\n(including C5 diversification), objective equation, and iterations.","operationId":"stealth_api_v1_stealth_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StealthRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StealthResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/stealth/demo":{"get":{"tags":["stealth"],"summary":"Stealth mode with demo data (any domain)","description":"Convenience: stealth diagnostics on built-in demo data for any domain.","operationId":"stealth_demo_api_v1_stealth_demo_get","parameters":[{"name":"domain","in":"query","required":false,"schema":{"$ref":"#/components/schemas/DemoDomain","default":"parts"}},{"name":"mode","in":"query","required":false,"schema":{"$ref":"#/components/schemas/SolverMode","default":"continuous"}},{"name":"lambda_param","in":"query","required":false,"schema":{"type":"number","default":0.5,"title":"Lambda Param"}},{"name":"max_vendor_share","in":"query","required":false,"schema":{"type":"number","default":0.6,"title":"Max Vendor Share"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StealthResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/demo/{domain}/suppliers":{"get":{"tags":["demo"],"summary":"Get demo suppliers for any domain","operationId":"demo_domain_suppliers_api_v1_demo__domain__suppliers_get","parameters":[{"name":"domain","in":"path","required":true,"schema":{"$ref":"#/components/schemas/DemoDomain"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/demo/{domain}/demand":{"get":{"tags":["demo"],"summary":"Get demo demand for any domain","operationId":"demo_domain_demand_api_v1_demo__domain__demand_get","parameters":[{"name":"domain","in":"path","required":true,"schema":{"$ref":"#/components/schemas/DemoDomain"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/demo/{domain}/labels":{"get":{"tags":["demo"],"summary":"Get product & region labels for any domain","operationId":"demo_domain_labels_api_v1_demo__domain__labels_get","parameters":[{"name":"domain","in":"path","required":true,"schema":{"$ref":"#/components/schemas/DemoDomain"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/demo/{domain}/{subdomain}/suppliers":{"get":{"tags":["demo"],"summary":"Get demo suppliers for a subdomain","operationId":"demo_subdomain_suppliers_api_v1_demo__domain___subdomain__suppliers_get","parameters":[{"name":"domain","in":"path","required":true,"schema":{"$ref":"#/components/schemas/DemoDomain"}},{"name":"subdomain","in":"path","required":true,"schema":{"$ref":"#/components/schemas/SubDomain"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/demo/{domain}/{subdomain}/demand":{"get":{"tags":["demo"],"summary":"Get demo demand for a subdomain","operationId":"demo_subdomain_demand_api_v1_demo__domain___subdomain__demand_get","parameters":[{"name":"domain","in":"path","required":true,"schema":{"$ref":"#/components/schemas/DemoDomain"}},{"name":"subdomain","in":"path","required":true,"schema":{"$ref":"#/components/schemas/SubDomain"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/demo/{domain}/{subdomain}/labels":{"get":{"tags":["demo"],"summary":"Get product & region labels for a subdomain","operationId":"demo_subdomain_labels_api_v1_demo__domain___subdomain__labels_get","parameters":[{"name":"domain","in":"path","required":true,"schema":{"$ref":"#/components/schemas/DemoDomain"}},{"name":"subdomain","in":"path","required":true,"schema":{"$ref":"#/components/schemas/SubDomain"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/domains":{"get":{"tags":["domains"],"summary":"List all 10 procurement domains with metadata","description":"Return metadata for all available demo domains.","operationId":"list_domains_api_v1_domains_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/domains/extended":{"get":{"tags":["domains"],"summary":"List 10 domains with subdomains (v3.0)","description":"Return domains + their subdomains, weights, and supplier counts.","operationId":"list_domains_extended_api_v1_domains_extended_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/domains/{domain}/subdomains":{"get":{"tags":["domains"],"summary":"List subdomains for a specific domain","description":"Return available subdomains and their stats for a domain.","operationId":"list_subdomains_api_v1_domains__domain__subdomains_get","parameters":[{"name":"domain","in":"path","required":true,"schema":{"$ref":"#/components/schemas/DemoDomain"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/weights/defaults":{"get":{"tags":["weights"],"summary":"Get current default weights","description":"Return the server-side default weights (modifiable via env vars).","operationId":"get_default_weights_api_v1_weights_defaults_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CriteriaWeights"}}}}}},"put":{"tags":["weights"],"summary":"Update default weights at runtime","description":"Modify default weights in-flight without restarting the server.","operationId":"set_default_weights_api_v1_weights_defaults_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CriteriaWeights"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CriteriaWeights"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/process-mining/dfg":{"post":{"tags":["process-mining"],"summary":"Discover Directly-Follows Graph from event log","description":"Build a **Directly-Follows Graph** (DFG) from P2P event logs.\n\nReturns nodes, edges (with frequency), start/end activities.\nReady for BI visualisation (Power BI, Tableau, Qlik).","operationId":"pm_dfg_api_v1_process_mining_dfg_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProcessMiningRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DFGResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/process-mining/lead-times":{"post":{"tags":["process-mining"],"summary":"Compute lead times between activities","description":"Calculate **lead time statistics** for each transition (activity → activity).\n\nReturns avg/median/p95/min/max hours per transition + case duration stats.","operationId":"pm_lead_times_api_v1_process_mining_lead_times_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProcessMiningRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeadTimeResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/process-mining/bottlenecks":{"post":{"tags":["process-mining"],"summary":"Detect process bottlenecks","description":"Identify **top-N bottleneck** transitions and activities.\n\nReturns slowest transitions, activity-level bottlenecks, and slowest cases.","operationId":"pm_bottlenecks_api_v1_process_mining_bottlenecks_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProcessMiningRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BottleneckResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/process-mining/variants":{"post":{"tags":["process-mining"],"summary":"Analyse process variants","description":"Identify unique **process variants** (traces) with frequency and duration.","operationId":"pm_variants_api_v1_process_mining_variants_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProcessMiningRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VariantResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/process-mining/demo/events":{"get":{"tags":["process-mining"],"summary":"Get demo P2P event log (10 cases)","description":"Return the built-in demo P2P event log for testing.","operationId":"pm_demo_events_api_v1_process_mining_demo_events_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/process-mining/demo/dfg":{"get":{"tags":["process-mining"],"summary":"DFG from demo P2P data","description":"Convenience: DFG discovery on built-in demo P2P event log.","operationId":"pm_demo_dfg_api_v1_process_mining_demo_dfg_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DFGResponse"}}}}}}},"/api/v1/process-mining/demo/lead-times":{"get":{"tags":["process-mining"],"summary":"Lead times from demo P2P data","description":"Convenience: lead time analysis on built-in demo P2P event log.","operationId":"pm_demo_lead_times_api_v1_process_mining_demo_lead_times_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeadTimeResponse"}}}}}}},"/api/v1/process-mining/demo/bottlenecks":{"get":{"tags":["process-mining"],"summary":"Bottlenecks from demo P2P data","description":"Convenience: bottleneck detection on built-in demo P2P event log.","operationId":"pm_demo_bottlenecks_api_v1_process_mining_demo_bottlenecks_get","parameters":[{"name":"top_n","in":"query","required":false,"schema":{"type":"integer","default":5,"title":"Top N"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BottleneckResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/process-mining/demo/variants":{"get":{"tags":["process-mining"],"summary":"Variants from demo P2P data","description":"Convenience: variant analysis on built-in demo P2P event log.","operationId":"pm_demo_variants_api_v1_process_mining_demo_variants_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VariantResponse"}}}}}}},"/api/v1/dashboard/pareto-xy":{"post":{"tags":["dashboard"],"summary":"Generate XY Pareto scatter (cost PLN vs quality)","description":"XY Pareto front: X = total cost PLN, Y = weighted quality.","operationId":"dashboard_pareto_xy_api_v1_dashboard_pareto_xy_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Dashboard Pareto Xy Api V1 Dashboard Pareto Xy Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/dashboard/pareto-xy/demo":{"get":{"tags":["dashboard"],"summary":"XY Pareto scatter with demo data","operationId":"dashboard_pareto_xy_demo_api_v1_dashboard_pareto_xy_demo_get","parameters":[{"name":"domain","in":"query","required":false,"schema":{"$ref":"#/components/schemas/DemoDomain","default":"parts"}},{"name":"lambda_param","in":"query","required":false,"schema":{"type":"number","default":0.5,"title":"Lambda Param"}},{"name":"mode","in":"query","required":false,"schema":{"$ref":"#/components/schemas/SolverMode","default":"continuous"}},{"name":"steps","in":"query","required":false,"schema":{"type":"integer","default":11,"title":"Steps"}},{"name":"max_vendor_share","in":"query","required":false,"schema":{"type":"number","default":0.6,"title":"Max Vendor Share"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Dashboard Pareto Xy Demo Api V1 Dashboard Pareto Xy Demo Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/dashboard/subdomain-aggregate/demo":{"get":{"tags":["dashboard"],"summary":"B4 — per-subdomain optimise + domain-level aggregate (demo)","description":"Run the optimiser independently for every subdomain in `domain`,\nthen aggregate. Useful when a domain's pool naturally splits\n(parts = brakes + filters + suspension) and each slice has its own\nsupplier bench.","operationId":"dashboard_subdomain_aggregate_demo_api_v1_dashboard_subdomain_aggregate_demo_get","parameters":[{"name":"domain","in":"query","required":false,"schema":{"$ref":"#/components/schemas/DemoDomain","default":"parts"}},{"name":"lambda_param","in":"query","required":false,"schema":{"type":"number","default":0.5,"title":"Lambda Param"}},{"name":"mode","in":"query","required":false,"schema":{"$ref":"#/components/schemas/SolverMode","default":"continuous"}},{"name":"max_vendor_share","in":"query","required":false,"schema":{"type":"number","default":0.6,"title":"Max Vendor Share"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Dashboard Subdomain Aggregate Demo Api V1 Dashboard Subdomain Aggregate Demo Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/dashboard/pareto-xy-mc":{"post":{"tags":["dashboard"],"summary":"XY Pareto scatter + Monte Carlo cost dispersion (B2)","description":"Phase B2 — Pareto front with an MC confidence fan on cost.\n\nEach λ point carries baseline cost plus MC-derived P5/mean/P95 over\n`mc_iterations` perturbed re-solves. Default 50 is a pragmatic trade-off;\nbump to 200 for tighter bands when latency is acceptable.","operationId":"dashboard_pareto_xy_mc_api_v1_dashboard_pareto_xy_mc_post","parameters":[{"name":"mc_iterations","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Mc Iterations"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Dashboard Pareto Xy Mc Api V1 Dashboard Pareto Xy Mc Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/dashboard/pareto-xy-mc/demo":{"get":{"tags":["dashboard"],"summary":"XY Pareto + MC with demo data","operationId":"dashboard_pareto_xy_mc_demo_api_v1_dashboard_pareto_xy_mc_demo_get","parameters":[{"name":"domain","in":"query","required":false,"schema":{"$ref":"#/components/schemas/DemoDomain","default":"parts"}},{"name":"lambda_param","in":"query","required":false,"schema":{"type":"number","default":0.5,"title":"Lambda Param"}},{"name":"mode","in":"query","required":false,"schema":{"$ref":"#/components/schemas/SolverMode","default":"continuous"}},{"name":"steps","in":"query","required":false,"schema":{"type":"integer","default":11,"title":"Steps"}},{"name":"max_vendor_share","in":"query","required":false,"schema":{"type":"number","default":0.6,"title":"Max Vendor Share"}},{"name":"mc_iterations","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Mc Iterations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Dashboard Pareto Xy Mc Demo Api V1 Dashboard Pareto Xy Mc Demo Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/dashboard/sankey/demo":{"get":{"tags":["dashboard"],"summary":"Sankey allocation flow diagram (demo data)","description":"Supplier → Product allocation flows for Sankey visualisation.","operationId":"dashboard_sankey_demo_api_v1_dashboard_sankey_demo_get","parameters":[{"name":"domain","in":"query","required":false,"schema":{"$ref":"#/components/schemas/DemoDomain","default":"parts"}},{"name":"lambda_param","in":"query","required":false,"schema":{"type":"number","default":0.5,"title":"Lambda Param"}},{"name":"max_vendor_share","in":"query","required":false,"schema":{"type":"number","default":0.6,"title":"Max Vendor Share"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SankeyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/dashboard/donut/demo":{"get":{"tags":["dashboard"],"summary":"Cost breakdown donut chart (demo data)","description":"Cost share per supplier as donut segments.","operationId":"dashboard_donut_demo_api_v1_dashboard_donut_demo_get","parameters":[{"name":"domain","in":"query","required":false,"schema":{"$ref":"#/components/schemas/DemoDomain","default":"parts"}},{"name":"lambda_param","in":"query","required":false,"schema":{"type":"number","default":0.5,"title":"Lambda Param"}},{"name":"max_vendor_share","in":"query","required":false,"schema":{"type":"number","default":0.6,"title":"Max Vendor Share"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DonutResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/dashboard/trend/demo":{"get":{"tags":["dashboard"],"summary":"Cross-domain comparison trend (demo data)","description":"Compare optimisation results across all 10 domains.","operationId":"dashboard_trend_demo_api_v1_dashboard_trend_demo_get","parameters":[{"name":"lambda_param","in":"query","required":false,"schema":{"type":"number","default":0.5,"title":"Lambda Param"}},{"name":"max_vendor_share","in":"query","required":false,"schema":{"type":"number","default":0.6,"title":"Max Vendor Share"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainTrendResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/db/status":{"get":{"tags":["database"],"summary":"Check database availability","operationId":"db_status_api_v1_db_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/db/suppliers":{"get":{"tags":["database"],"summary":"Get suppliers from DB","operationId":"get_suppliers_api_v1_db_suppliers_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"domain","in":"query","required":true,"schema":{"type":"string","description":"Domain name","title":"Domain"},"description":"Domain name"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["database"],"summary":"Delete suppliers for a domain","operationId":"delete_suppliers_api_v1_db_suppliers_delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"domain","in":"query","required":true,"schema":{"type":"string","title":"Domain"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/db/suppliers/upload":{"post":{"tags":["database"],"summary":"Upload suppliers from CSV/XLSX","operationId":"upload_suppliers_api_v1_db_suppliers_upload_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"domain","in":"query","required":true,"schema":{"type":"string","description":"Domain to assign suppliers to","title":"Domain"},"description":"Domain to assign suppliers to"},{"name":"replace","in":"query","required":false,"schema":{"type":"boolean","description":"Replace existing suppliers for this domain","default":false,"title":"Replace"},"description":"Replace existing suppliers for this domain"}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_suppliers_api_v1_db_suppliers_upload_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/db/demand":{"get":{"tags":["database"],"summary":"Get demand from DB","operationId":"get_demand_api_v1_db_demand_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"domain","in":"query","required":true,"schema":{"type":"string","title":"Domain"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["database"],"summary":"Delete demand for a domain","operationId":"delete_demand_api_v1_db_demand_delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"domain","in":"query","required":true,"schema":{"type":"string","title":"Domain"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/db/demand/upload":{"post":{"tags":["database"],"summary":"Upload demand from CSV/XLSX","operationId":"upload_demand_api_v1_db_demand_upload_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"domain","in":"query","required":true,"schema":{"type":"string","title":"Domain"}},{"name":"replace","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Replace"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_demand_api_v1_db_demand_upload_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/db/results":{"get":{"tags":["database"],"summary":"List optimization results","operationId":"list_results_api_v1_db_results_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"domain","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Domain"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/db/results/{result_id}":{"get":{"tags":["database"],"summary":"Get optimization result detail","operationId":"get_result_api_v1_db_results__result_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"result_id","in":"path","required":true,"schema":{"type":"integer","title":"Result Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/db/p2p-events/datasets":{"get":{"tags":["database"],"summary":"List P2P event datasets","operationId":"list_p2p_datasets_api_v1_db_p2p_events_datasets_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/db/p2p-events":{"get":{"tags":["database"],"summary":"Get P2P events from DB","operationId":"get_p2p_events_api_v1_db_p2p_events_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"dataset_name","in":"query","required":false,"schema":{"type":"string","default":"default","title":"Dataset Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["database"],"summary":"Delete P2P events for a dataset","operationId":"delete_p2p_events_api_v1_db_p2p_events_delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"dataset_name","in":"query","required":false,"schema":{"type":"string","default":"default","title":"Dataset Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/db/p2p-events/upload":{"post":{"tags":["database"],"summary":"Upload P2P events from CSV/XLSX","operationId":"upload_p2p_events_api_v1_db_p2p_events_upload_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"dataset_name","in":"query","required":false,"schema":{"type":"string","default":"default","title":"Dataset Name"}},{"name":"replace","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Replace"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_p2p_events_api_v1_db_p2p_events_upload_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/db/seed/{domain}":{"post":{"tags":["database"],"summary":"Seed demo data into DB for a domain","operationId":"seed_data_api_v1_db_seed__domain__post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string","title":"Domain"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/db/seed-p2p":{"post":{"tags":["database"],"summary":"Seed demo P2P event log into DB","operationId":"seed_p2p_api_v1_db_seed_p2p_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"dataset_name","in":"query","required":false,"schema":{"type":"string","default":"demo","title":"Dataset Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/process-digging/dfg":{"post":{"tags":["process-digging"],"summary":"Frequency DFG via Process Digging Engine","description":"Discover frequency-based DFG using the Process Digging Engine.","operationId":"digging_dfg_api_v1_process_digging_dfg_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProcessMiningRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DFGResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/process-digging/performance-dfg":{"post":{"tags":["process-digging"],"summary":"Performance DFG — edges weighted by transition time","description":"**Performance DFG** — each edge carries avg/median/p95 transition time (hours).\n\nThis is what BI dashboards need to visualise bottlenecks directly on the graph.","operationId":"digging_performance_dfg_api_v1_process_digging_performance_dfg_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProcessMiningRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PerformanceDFGResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/process-digging/lead-times":{"post":{"tags":["process-digging"],"summary":"Lead times via Process Digging Engine","description":"Per-transition and per-case lead time statistics.","operationId":"digging_lead_times_api_v1_process_digging_lead_times_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProcessMiningRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeadTimeResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/process-digging/bottlenecks":{"post":{"tags":["process-digging"],"summary":"Bottleneck detection via Process Digging Engine","description":"Multi-layer bottleneck detection: transition, activity, and case level.","operationId":"digging_bottlenecks_api_v1_process_digging_bottlenecks_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProcessMiningRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BottleneckResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/process-digging/variants":{"post":{"tags":["process-digging"],"summary":"Variant analysis via Process Digging Engine","description":"Group cases by unique activity trace with frequency and duration stats.","operationId":"digging_variants_api_v1_process_digging_variants_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProcessMiningRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VariantResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/process-digging/conformance":{"post":{"tags":["process-digging"],"summary":"Conformance check — discovered vs reference P2P path","description":"**Conformance Checking** — compare discovered process against reference path.\n\nReturns per-case fitness (0..1), missing/extra activities, order correctness.\nDefault reference: Flow Procurement standard P2P (8 steps).","operationId":"digging_conformance_api_v1_process_digging_conformance_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConformanceRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConformanceResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/process-mining/transition-latency-grid":{"get":{"tags":["process-digging"],"summary":"Heatmap-ready grid of transition latencies (Performance Spectrum)","description":"Returns a 2D grid (from_activity × to_activity) z p95/avg/count per\ntransition. Frontend renderuje jako heatmap (Performance Spectrum).\nReuses ProcessDiggingEngine.compute_lead_times() — zero new compute.","operationId":"transition_latency_grid_api_v1_process_mining_transition_latency_grid_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/process-mining/conformance/upload-bpmn":{"post":{"tags":["process-digging","conformance"],"summary":"Upload BPMN policy XML — parse + persist for conformance checks","description":"Klient wgrywa BPMN swojej polityki zakupowej (Camunda/Signavio/Bizagi\neksportują XML). Backend parsuje, wyciąga reference path (start → end\nprzez tasks), persistuje. Zwraca model_id do użycia w /overview + /violations.","operationId":"conformance_upload_bpmn_api_v1_process_mining_conformance_upload_bpmn_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_conformance_upload_bpmn_api_v1_process_mining_conformance_upload_bpmn_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/process-mining/conformance/models":{"get":{"tags":["process-digging","conformance"],"summary":"List uploaded BPMN policy models","operationId":"conformance_list_models_api_v1_process_mining_conformance_models_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/process-mining/conformance/models/{model_id}":{"delete":{"tags":["process-digging","conformance"],"summary":"Delete a BPMN policy model","operationId":"conformance_delete_model_api_v1_process_mining_conformance_models__model_id__delete","parameters":[{"name":"model_id","in":"path","required":true,"schema":{"type":"integer","title":"Model Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/process-mining/conformance/overview":{"get":{"tags":["process-digging","conformance"],"summary":"Conformance overview against an uploaded BPMN model","description":"Liczy fitness + conformance_rate dla wszystkich cases w demo log\nprzeciwko reference_path z uploadowanego BPMN-a.","operationId":"conformance_overview_api_v1_process_mining_conformance_overview_get","parameters":[{"name":"model_id","in":"query","required":true,"schema":{"type":"integer","title":"Model Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/process-mining/conformance/violations":{"get":{"tags":["process-digging","conformance"],"summary":"Violation breakdown by Apromore-style type (5 buckets)","description":"Klasyfikuje per-case violations na 5 typów: wrong_order,\nmissing_activity, unexpected_activity, repeated_activity,\nvariant_deviation. Każdy bucket dostaje liczbę + 3 przykłady.","operationId":"conformance_violations_api_v1_process_mining_conformance_violations_get","parameters":[{"name":"model_id","in":"query","required":true,"schema":{"type":"integer","title":"Model Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/process-digging/handovers":{"post":{"tags":["process-digging"],"summary":"Resource handover — social network analysis","description":"**Resource Handover Analysis** — who passes work to whom.\n\nReturns social network graph of resource interactions.\nRequires 'resource' field in event log entries.","operationId":"digging_handovers_api_v1_process_digging_handovers_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProcessMiningRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HandoverResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/process-digging/rework":{"post":{"tags":["process-digging"],"summary":"Detect rework / loops in process cases","description":"**Rework Detection** — finds repeated activities within cases.\n\nIdentifies process loops, calculates rework rate, and estimates extra cost.","operationId":"digging_rework_api_v1_process_digging_rework_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProcessMiningRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReworkResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/process-digging/sla-monitor":{"post":{"tags":["process-digging"],"summary":"SLA monitoring — compare case durations vs target","description":"**SLA Monitoring** — compares actual case durations against target SLA.\n\nIf `target_hours` is omitted, auto-calculates as median case duration × 1.5.\nReturns breach rate, breach count, and individual breach details.","operationId":"digging_sla_monitor_api_v1_process_digging_sla_monitor_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SLARequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SLAMonitorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/process-digging/anomalies":{"post":{"tags":["process-digging"],"summary":"Statistical anomaly detection on case durations","description":"**Anomaly Detection** — z-score based outlier detection on case durations.\n\nCases with duration > mean + z_threshold × std are flagged as anomalies.","operationId":"digging_anomalies_api_v1_process_digging_anomalies_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnomalyRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnomalyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/process-digging/full-report":{"post":{"tags":["process-digging"],"summary":"Full process digging report — all analyses combined","description":"**Complete P2P Process Analysis** in one call.\n\nReturns: DFG (frequency + performance), lead times, bottlenecks,\nvariants, conformance, resource handovers, rework, SLA, and anomalies.\n\nIdeal for BI dashboard initial load (Power BI, Tableau, Qlik, Looker, Metabase).","operationId":"digging_full_report_api_v1_process_digging_full_report_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DiggingRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FullProcessDiggingReport"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/process-digging/demo/performance-dfg":{"get":{"tags":["process-digging"],"summary":"Performance DFG from demo P2P data","description":"Performance DFG on built-in demo P2P event log.","operationId":"digging_demo_performance_dfg_api_v1_process_digging_demo_performance_dfg_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PerformanceDFGResponse"}}}}}}},"/api/v1/process-digging/demo/conformance":{"get":{"tags":["process-digging"],"summary":"Conformance check from demo P2P data","description":"Conformance checking on demo data vs Flow Procurement standard P2P path.","operationId":"digging_demo_conformance_api_v1_process_digging_demo_conformance_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConformanceResponse"}}}}}}},"/api/v1/process-digging/demo/handovers":{"get":{"tags":["process-digging"],"summary":"Resource handovers from demo P2P data","description":"Resource handover social network on demo data.","operationId":"digging_demo_handovers_api_v1_process_digging_demo_handovers_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HandoverResponse"}}}}}}},"/api/v1/process-digging/demo/rework":{"get":{"tags":["process-digging"],"summary":"Rework detection from demo P2P data","description":"Rework / loop detection on built-in demo P2P event log.","operationId":"digging_demo_rework_api_v1_process_digging_demo_rework_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReworkResponse"}}}}}}},"/api/v1/process-digging/demo/sla-monitor":{"get":{"tags":["process-digging"],"summary":"SLA monitoring from demo P2P data","description":"SLA monitoring on demo data with auto-calculated target.","operationId":"digging_demo_sla_monitor_api_v1_process_digging_demo_sla_monitor_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SLAMonitorResponse"}}}}}}},"/api/v1/process-digging/demo/anomalies":{"get":{"tags":["process-digging"],"summary":"Anomaly detection from demo P2P data","description":"Statistical anomaly detection on demo P2P event log.","operationId":"digging_demo_anomalies_api_v1_process_digging_demo_anomalies_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnomalyResponse"}}}}}}},"/api/v1/process-digging/demo/full-report":{"get":{"tags":["process-digging"],"summary":"Full process digging report from demo data","description":"Complete P2P analysis on built-in demo data — one call for BI dashboards.","operationId":"digging_demo_full_report_api_v1_process_digging_demo_full_report_get","parameters":[{"name":"top_n","in":"query","required":false,"schema":{"type":"integer","default":5,"title":"Top N"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FullProcessDiggingReport"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/process-digging/drift":{"post":{"tags":["process-digging"],"summary":"Variant drift between two event windows","description":"Jensen-Shannon divergence over variant-frequency distributions.\n\nComplements static variant analysis: catches silent process degradation\n(e.g. 25% of POs suddenly skipping approval) before it shows up as a\nKPI breach. Severity bands: low <0.05 ≤ medium <0.20 ≤ high.","operationId":"digging_drift_api_v1_process_digging_drift_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DriftRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DriftResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/process-digging/demo/drift":{"get":{"tags":["process-digging"],"summary":"Variant drift on demo event log (auto-split by median timestamp)","description":"Convenience demo endpoint: auto-split the built-in P2P demo log at the\n`split_ratio`-quantile of timestamps and compute drift between the\nearlier and later half. Useful for walkthrough demos where no explicit\nwindow boundaries exist yet.","operationId":"digging_demo_drift_api_v1_process_digging_demo_drift_get","parameters":[{"name":"split_ratio","in":"query","required":false,"schema":{"type":"number","default":0.5,"title":"Split Ratio"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DriftResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/process-digging/changepoints/demo":{"get":{"tags":["process-digging"],"summary":"ADWIN-style change-point detection per supplier on demo data","description":"Run adaptive change-point detection per supplier on quarterly delay\nrates. Returns top suppliers with statistically significant regime\nchanges — ranked by magnitude of the shift.\n\n`source='prediction'` uses the enriched ML demo log (7500+ events,\n10 suppliers, 2 years) — the right default for walkthrough demos.\n`source='process'` uses the thinner process-mining demo log.","operationId":"digging_changepoints_demo_api_v1_process_digging_changepoints_demo_get","parameters":[{"name":"delta","in":"query","required":false,"schema":{"type":"number","default":0.05,"title":"Delta"}},{"name":"min_periods","in":"query","required":false,"schema":{"type":"integer","default":4,"title":"Min Periods"}},{"name":"source","in":"query","required":false,"schema":{"type":"string","default":"prediction","title":"Source"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Digging Changepoints Demo Api V1 Process Digging Changepoints Demo Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/process-digging/changepoints":{"post":{"tags":["process-digging"],"summary":"Change-point detection on caller-supplied event log","description":"Run change-point detection on a custom event log.","operationId":"digging_changepoints_api_v1_process_digging_changepoints_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChangepointRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Digging Changepoints Api V1 Process Digging Changepoints Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/mip/optimize":{"post":{"tags":["mip"],"summary":"Run dedicated MIP optimisation with IT-specific constraints","description":"**Dedicated MIP Solver** — binary (0/1) supplier selection.\n\nIT-specific constraints beyond standard MIP:\n- **sla_floor** — minimum compliance/SLA score for eligibility (e.g., 0.8)\n- **total_budget** — budget ceiling in PLN\n- **max_products_per_supplier** — limits workload concentration\n\nAll standard constraints (demand, capacity, regional, diversification) also apply.","operationId":"mip_optimize_api_v1_mip_optimize_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MipOptimizationRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MipOptimizationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/mip/optimize/demo":{"get":{"tags":["mip"],"summary":"MIP optimisation with demo data (any domain)","description":"Run MIP on built-in demo dataset. Defaults to IT services domain.","operationId":"mip_optimize_demo_api_v1_mip_optimize_demo_get","parameters":[{"name":"domain","in":"query","required":false,"schema":{"$ref":"#/components/schemas/DemoDomain","default":"it_services"}},{"name":"lambda_param","in":"query","required":false,"schema":{"type":"number","default":0.5,"title":"Lambda Param"}},{"name":"max_vendor_share","in":"query","required":false,"schema":{"type":"number","default":1.0,"title":"Max Vendor Share"}},{"name":"sla_floor","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Sla Floor"}},{"name":"total_budget","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Total Budget"}},{"name":"max_products_per_supplier","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Products Per Supplier"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MipOptimizationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/mip/compare":{"post":{"tags":["mip"],"summary":"Compare LP (continuous) vs MIP (binary) results","description":"Run both LP (continuous) and MIP (binary) on the same data.\n\nReturns both results for side-by-side comparison:\n- LP: fractional allocations, lower bound on objective\n- MIP: binary selections, real-world actionable assignments","operationId":"mip_compare_api_v1_mip_compare_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MipOptimizationRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/mip/compare/demo":{"get":{"tags":["mip"],"summary":"LP vs MIP comparison with demo data","description":"Convenience: LP vs MIP comparison on built-in demo data.","operationId":"mip_compare_demo_api_v1_mip_compare_demo_get","parameters":[{"name":"domain","in":"query","required":false,"schema":{"$ref":"#/components/schemas/DemoDomain","default":"it_services"}},{"name":"lambda_param","in":"query","required":false,"schema":{"type":"number","default":0.5,"title":"Lambda Param"}},{"name":"max_vendor_share","in":"query","required":false,"schema":{"type":"number","default":1.0,"title":"Max Vendor Share"}},{"name":"sla_floor","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Sla Floor"}},{"name":"total_budget","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Total Budget"}},{"name":"max_products_per_supplier","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Products Per Supplier"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/whatif/scenarios":{"post":{"tags":["what-if"],"summary":"Run 2-10 optimisation scenarios and compare results","description":"**What-If Scenario Builder** — run multiple scenarios with different parameters.\n\nEach scenario can vary: lambda, weights, mode (LP/MIP), budget, SLA floor, etc.\nReturns a comparison matrix showing which scenario is best for each metric.","operationId":"whatif_scenarios_api_v1_whatif_scenarios_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WhatIfRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WhatIfResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/whatif/scenarios/demo":{"get":{"tags":["what-if"],"summary":"Demo what-if comparison: Baseline vs Tight Budget vs Green Focus","description":"Run 3 pre-built scenarios on demo data for comparison.","operationId":"whatif_scenarios_demo_api_v1_whatif_scenarios_demo_get","parameters":[{"name":"domain","in":"query","required":false,"schema":{"$ref":"#/components/schemas/DemoDomain","default":"it_services"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WhatIfResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/whatif/chain":{"post":{"tags":["what-if"],"summary":"Phase B3 — cumulative scenario chain (each step deltas on top of previous)","operationId":"whatif_chain_api_v1_whatif_chain_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChainRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Whatif Chain Api V1 Whatif Chain Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/whatif/chain/demo":{"get":{"tags":["what-if"],"summary":"Demo scenario chain on demo data","operationId":"whatif_chain_demo_api_v1_whatif_chain_demo_get","parameters":[{"name":"domain","in":"query","required":false,"schema":{"$ref":"#/components/schemas/DemoDomain","default":"parts"}},{"name":"include_impact","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Include Impact"}},{"name":"annual_spend_multiplier","in":"query","required":false,"schema":{"type":"number","default":12.0,"title":"Annual Spend Multiplier"}},{"name":"avg_lead_days","in":"query","required":false,"schema":{"type":"number","default":14.0,"title":"Avg Lead Days"}},{"name":"otif_baseline_pct","in":"query","required":false,"schema":{"type":"number","default":80.0,"title":"Otif Baseline Pct"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Whatif Chain Demo Api V1 Whatif Chain Demo Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/whatif/alerts":{"post":{"tags":["alerts"],"summary":"Generate optimisation alerts from solver result","description":"**Optimisation Alerts** — check solver results for issues.\n\nDetects: budget overrun, supplier concentration, infeasible products, high cost.","operationId":"whatif_alerts_api_v1_whatif_alerts_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OptimizationAlertRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AlertsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/whatif/alerts/process":{"post":{"tags":["alerts"],"summary":"Generate process alerts from P2P event log","description":"**Process Alerts** — analyze event log and flag issues.\n\nDetects: SLA breaches, low conformance, bottlenecks, rework, anomalies.","operationId":"whatif_alerts_process_api_v1_whatif_alerts_process_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProcessAlertRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AlertsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/whatif/alerts/demo":{"get":{"tags":["alerts"],"summary":"Demo alerts from demo data (optimization + process)","description":"Generate alerts from demo optimization + demo P2P data.","operationId":"whatif_alerts_demo_api_v1_whatif_alerts_demo_get","parameters":[{"name":"domain","in":"query","required":false,"schema":{"$ref":"#/components/schemas/DemoDomain","default":"it_services"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AlertsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/integration/rfq/import":{"post":{"tags":["integration"],"summary":"Import RFQ and optionally run optimisation","description":"Accept an RFQ (with bids), store it, and optionally run the optimizer.\n\nIf `auto_optimize=True`, converts bids → SupplierInput, runs LP/MIP,\nand returns the allocation result alongside the stored RFQ.","operationId":"rfq_import_api_v1_integration_rfq_import_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RfqImportRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RfqResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/integration/rfq/export":{"post":{"tags":["integration"],"summary":"Export optimisation result (generic RFQ JSON format)","description":"Convert stored RFQ + allocation result → generic export rows.\n\nCompatible with any downstream ERP/sourcing system.\nRequires the RFQ to be previously imported via /rfq/import.","operationId":"rfq_export_api_v1_integration_rfq_export_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RfqExportRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RfqExportResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/integration/status":{"get":{"tags":["integration"],"summary":"Check RFQ integration connectivity status","description":"Health-check for external RFQ integration endpoints.\n\nIn demo mode returns simulated connectivity status.\nIn production, would ping the configured RFQ import/export APIs.","operationId":"integration_status_api_v1_integration_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationStatusResponse"}}}}}}},"/api/v1/integration/webhook":{"post":{"tags":["integration"],"summary":"Receive webhook events from external RFQ system","description":"Process incoming webhook events:\n- rfq.created → log new RFQ\n- bid.received → log bid update\n- rfq.closed → mark RFQ as closed","operationId":"webhook_receive_api_v1_integration_webhook_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookPayload"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/integration/rfq/demo":{"get":{"tags":["integration"],"summary":"Generate a demo RFQ for testing","description":"Generate and store a demo RFQ with 5 line items and 4 bids.","operationId":"rfq_demo_api_v1_integration_rfq_demo_get","parameters":[{"name":"domain","in":"query","required":false,"schema":{"type":"string","default":"parts","title":"Domain"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/integration/rfq/{rfq_id}":{"get":{"tags":["integration"],"summary":"Retrieve a stored RFQ by ID","description":"Fetch a previously stored RFQ.","operationId":"rfq_get_api_v1_integration_rfq__rfq_id__get","parameters":[{"name":"rfq_id","in":"path","required":true,"schema":{"type":"string","title":"Rfq Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/risk/heatmap":{"post":{"tags":["risk"],"summary":"Risk heatmap from optimisation result","operationId":"risk_heatmap_api_v1_risk_heatmap_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OptimizationRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RiskHeatmapResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/risk/heatmap/demo":{"get":{"tags":["risk"],"summary":"Demo risk heatmap","operationId":"risk_heatmap_demo_api_v1_risk_heatmap_demo_get","parameters":[{"name":"domain","in":"query","required":false,"schema":{"$ref":"#/components/schemas/DemoDomain","default":"parts"}},{"name":"lambda_param","in":"query","required":false,"schema":{"type":"number","default":0.5,"title":"Lambda Param"}},{"name":"max_vendor_share","in":"query","required":false,"schema":{"type":"number","default":0.6,"title":"Max Vendor Share"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RiskHeatmapResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/risk/monte-carlo":{"post":{"tags":["risk"],"summary":"Monte Carlo cost/risk simulation","operationId":"risk_monte_carlo_api_v1_risk_monte_carlo_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MonteCarloRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MonteCarloResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/risk/monte-carlo/demo":{"get":{"tags":["risk"],"summary":"Demo Monte Carlo simulation (500 iterations)","operationId":"risk_monte_carlo_demo_api_v1_risk_monte_carlo_demo_get","parameters":[{"name":"domain","in":"query","required":false,"schema":{"$ref":"#/components/schemas/DemoDomain","default":"parts"}},{"name":"n_iterations","in":"query","required":false,"schema":{"type":"integer","default":500,"title":"N Iterations"}},{"name":"lambda_param","in":"query","required":false,"schema":{"type":"number","default":0.5,"title":"Lambda Param"}},{"name":"max_vendor_share","in":"query","required":false,"schema":{"type":"number","default":0.6,"title":"Max Vendor Share"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MonteCarloResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/risk/negotiation":{"post":{"tags":["risk"],"summary":"Negotiation target analysis","operationId":"risk_negotiation_api_v1_risk_negotiation_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OptimizationRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NegotiationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/risk/negotiation/demo":{"get":{"tags":["risk"],"summary":"Demo negotiation targets","operationId":"risk_negotiation_demo_api_v1_risk_negotiation_demo_get","parameters":[{"name":"domain","in":"query","required":false,"schema":{"$ref":"#/components/schemas/DemoDomain","default":"parts"}},{"name":"lambda_param","in":"query","required":false,"schema":{"type":"number","default":0.5,"title":"Lambda Param"}},{"name":"max_vendor_share","in":"query","required":false,"schema":{"type":"number","default":0.6,"title":"Max Vendor Share"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NegotiationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/risk/osint/nip":{"get":{"tags":["risk","risk","osint"],"summary":"OSINT supplier lookup by NIP (live — queries public registries)","operationId":"osint_by_nip_api_v1_risk_osint_nip_get","parameters":[{"name":"nip","in":"query","required":true,"schema":{"type":"string","description":"Polish NIP number (10 digits)","title":"Nip"},"description":"Polish NIP number (10 digits)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/risk/osint/nip/demo":{"get":{"tags":["risk","risk","osint"],"summary":"OSINT demo lookup (offline simulated data)","operationId":"osint_by_nip_demo_api_v1_risk_osint_nip_demo_get","parameters":[{"name":"nip","in":"query","required":false,"schema":{"type":"string","description":"NIP for demo lookup","default":"5261234567","title":"Nip"},"description":"NIP for demo lookup"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/risk/osint/company":{"get":{"tags":["risk","risk","osint"],"summary":"OSINT lookup by company name (live — KRS search)","operationId":"osint_by_company_api_v1_risk_osint_company_get","parameters":[{"name":"name","in":"query","required":true,"schema":{"type":"string","description":"Company name to search","title":"Name"},"description":"Company name to search"},{"name":"country","in":"query","required":false,"schema":{"type":"string","description":"ISO country code","default":"PL","title":"Country"},"description":"ISO country code"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/buying/catalog":{"get":{"tags":["Optimized Buying"],"summary":"Catalog","description":"Return product catalog, filtered by category or UNSPSC code.\n\nWhen `unspsc` is provided, uses smart matching:\n- Deep UNSPSC code → specific category\n- Segment level → all categories for that segment\n- Fallback to neighboring segments","operationId":"catalog_api_v1_buying_catalog_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"}},{"name":"unspsc","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Unspsc"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/buying/categories":{"get":{"tags":["Optimized Buying"],"summary":"Categories","description":"Return category list with metadata.","operationId":"categories_api_v1_buying_categories_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/buying/calculate":{"post":{"tags":["Optimized Buying"],"summary":"Calculate Cart","description":"Apply all business rules to cart and return computed state.","operationId":"calculate_cart_api_v1_buying_calculate_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CartRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/buying/optimize":{"post":{"tags":["Optimized Buying"],"summary":"Optimize Cart","description":"Step 1: Run optimizer for each domain in the cart.\n\nReturns optimization results WITHOUT creating an order.\nReturns an optimization_id to use in /buying/checkout.","operationId":"optimize_cart_api_v1_buying_optimize_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckoutRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/buying/checkout":{"post":{"tags":["Optimized Buying"],"summary":"Checkout","description":"Step 2: Create order from a pending optimization result.\n\nRequires optimization_id from /buying/optimize.","operationId":"checkout_api_v1_buying_checkout_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlaceOrderRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/buying/order-from-optimizer":{"post":{"tags":["Optimized Buying"],"summary":"Order From Optimizer","description":"Create a Buying order from Tab 1 optimization results.\n\nBridges the analytical optimizer with the order lifecycle.\nSynthesizes a cart_state from domain demand data.","operationId":"order_from_optimizer_api_v1_buying_order_from_optimizer_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OptimizerOrderRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/buying/orders":{"get":{"tags":["Optimized Buying"],"summary":"Orders List","description":"List all orders, optionally filtered by status and/or supplier_id.\n\nThe supplier filter looks at each order's `purchase_orders[]` and keeps\norders where any PO targets the given supplier — used by Step 5\nmonitoring to drill down to a single supplier's traffic.","operationId":"orders_list_api_v1_buying_orders_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"supplier","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter to orders that contain a PO for this supplier_id","title":"Supplier"},"description":"Filter to orders that contain a PO for this supplier_id"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/buying/orders/{order_id}":{"get":{"tags":["Optimized Buying"],"summary":"Order Detail","description":"Get full order details. Tenant-scoped via TenantContextMiddleware.","operationId":"order_detail_api_v1_buying_orders__order_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string","title":"Order Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/buying/budgets/{mpk}":{"get":{"tags":["Optimized Buying"],"summary":"Get Mpk Budget","description":"Return the configured cap and spend-to-date for a given MPK.\nUsed by the approval modal to show a budget gauge before clicking Akceptuj.","operationId":"get_mpk_budget_api_v1_buying_budgets__mpk__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"mpk","in":"path","required":true,"schema":{"type":"string","title":"Mpk"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/buying/orders/{order_id}/approve":{"post":{"tags":["Optimized Buying"],"summary":"Order Approve","description":"Manager approves an order (pending_approval → approved).\n\nMPK budget gate: refuses approval when the order's total + spend already\nbooked against this MPK exceeds the configured cap. This mirrors Coupa's\nbehaviour where approvers cannot push a requisition past a hard budget\nline — they must ask the requester to split, get an exception, or wait.","operationId":"order_approve_api_v1_buying_orders__order_id__approve_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string","title":"Order Id"}},{"name":"approver","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Override actor name (defaults to JWT email/username)","title":"Approver"},"description":"Override actor name (defaults to JWT email/username)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/buying/contracts/by-supplier/{supplier_id}":{"get":{"tags":["Optimized Buying"],"summary":"Contract By Supplier","description":"Return active contract (if any) for the given supplier_id with\ncomputed usage. Frontend uses this in the order detail modal so each PO\nshows its contract footprint.","operationId":"contract_by_supplier_api_v1_buying_contracts_by_supplier__supplier_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"supplier_id","in":"path","required":true,"schema":{"type":"string","title":"Supplier Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/buying/orders/{order_id}/approve-link":{"get":{"tags":["Optimized Buying"],"summary":"Order Approve Link Create","description":"Generate a one-click signed approval URL — mock SMTP. Manager hits this\nfrom the approval modal, gets a link they could paste into an email or\nopen from their phone. The link itself doesn't need a JWT — just the\nHMAC token. Mirrors Coupa/Jaggaer's approve-by-email pattern.","operationId":"order_approve_link_create_api_v1_buying_orders__order_id__approve_link_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string","title":"Order Id"}},{"name":"approver","in":"query","required":false,"schema":{"type":"string","default":"manager@flowproc.eu","title":"Approver"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/buying/approve-link/{order_id}":{"get":{"tags":["Optimized Buying"],"summary":"Approve Link Page","description":"Mobile-friendly one-tap approval landing page. No JWT needed —\nthe HMAC token authenticates the action.","operationId":"approve_link_page_api_v1_buying_approve_link__order_id__get","parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string","title":"Order Id"}},{"name":"approver","in":"query","required":false,"schema":{"type":"string","default":"","title":"Approver"}},{"name":"token","in":"query","required":false,"schema":{"type":"string","default":"","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/buying/approve-by-token":{"post":{"tags":["Optimized Buying"],"summary":"Approve By Token","description":"Token-authenticated approve handler — no JWT required, just HMAC.","operationId":"approve_by_token_api_v1_buying_approve_by_token_post","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/api/v1/buying/reject-by-token":{"post":{"tags":["Optimized Buying"],"summary":"Reject By Token","description":"Token-authenticated reject handler.","operationId":"reject_by_token_api_v1_buying_reject_by_token_post","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/api/v1/buying/ksef/status":{"get":{"tags":["Optimized Buying"],"summary":"Ksef Backend Status","description":"Show which KSeF backend (mock|live) is configured.","operationId":"ksef_backend_status_api_v1_buying_ksef_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/buying/ksef/send-invoice":{"post":{"tags":["Optimized Buying"],"summary":"Ksef Send Invoice","description":"Wyślij wybraną fakturę (z naszej tabeli `invoices`) do KSeF.\nW mock-mode generuje deterministyczny ksef_ref + UPO syntetyczne;\nw live (po cert MF) podpina realny POST do api.ksef.mf.gov.pl.","operationId":"ksef_send_invoice_api_v1_buying_ksef_send_invoice_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KsefSendRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/buying/ksef/message/{ksef_ref}":{"get":{"tags":["Optimized Buying"],"summary":"Ksef Message Status","description":"Zwraca aktualny status messagu KSeF + parsed UPO jeśli przyszedł.","operationId":"ksef_message_status_api_v1_buying_ksef_message__ksef_ref__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"ksef_ref","in":"path","required":true,"schema":{"type":"string","title":"Ksef Ref"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/buying/ksef/invoice/{invoice_id}":{"get":{"tags":["Optimized Buying"],"summary":"Ksef Messages For Invoice","description":"Lista wszystkich KSeF messages dla danej faktury (incoming + outgoing).","operationId":"ksef_messages_for_invoice_api_v1_buying_ksef_invoice__invoice_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"invoice_id","in":"path","required":true,"schema":{"type":"integer","title":"Invoice Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/buying/ksef/import-incoming":{"post":{"tags":["Optimized Buying"],"summary":"Ksef Import Incoming","description":"Pobierz syntetyczne 'incoming' faktury skierowane na nasz tenant\n(mock generuje 1 demo). W live: poll MF API albo subscribe webhook.","operationId":"ksef_import_incoming_api_v1_buying_ksef_import_incoming_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/copilot/report-query":{"post":{"tags":["Optimized Buying"],"summary":"Report Query","description":"Pytanie po polsku → narrative + table + chart_spec.\nBezpieczne: LLM emituje structured query (whitelist'owana shape),\nexecutor jest pure-Python nad in-memory order list.","operationId":"report_query_api_v1_copilot_report_query_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportQueryRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/buying/aftermarket/oe/{oe_number}":{"get":{"tags":["Optimized Buying"],"summary":"Aftermarket Oe Lookup","description":"Cross-reference OE number → aftermarket SKUs (TecDoc-style mock).\nUsed by buyer Step 1 catalog search.","operationId":"aftermarket_oe_lookup_api_v1_buying_aftermarket_oe__oe_number__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"oe_number","in":"path","required":true,"schema":{"type":"string","title":"Oe Number"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/buying/aftermarket/suggest":{"get":{"tags":["Optimized Buying"],"summary":"Aftermarket Suggest","description":"Natural language → SKU suggestions. E.g. 'klocki przód golf 5'.\nWykorzystywane przez intake/copilot do auto-suggest części.","operationId":"aftermarket_suggest_api_v1_buying_aftermarket_suggest_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","description":"Natural language query","title":"Q"},"description":"Natural language query"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/buying/aftermarket/vehicles":{"get":{"tags":["Optimized Buying"],"summary":"Aftermarket Vehicles List","description":"Lista znanych modeli pojazdów (dla wizard auto-aftermarket dropdown).","operationId":"aftermarket_vehicles_list_api_v1_buying_aftermarket_vehicles_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/buying/whitelist/refresh-now":{"post":{"tags":["Optimized Buying"],"summary":"Whitelist Refresh Now","description":"Manual trigger — sprawdź wszystkich aktywnych dostawców w MF API\n(mock domyślnie). Persistuje wyniki + emituje alerty gdy supplier\nstracił status VAT czynny.","operationId":"whitelist_refresh_now_api_v1_buying_whitelist_refresh_now_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/buying/whitelist/alerts":{"get":{"tags":["Optimized Buying"],"summary":"Whitelist Alerts","description":"Recent suppliers w stanie 'wykreślony' lub 'nieznany' — used by\nadmin dashboard alerts panel.","operationId":"whitelist_alerts_api_v1_buying_whitelist_alerts_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/buying/whitelist/supplier/{supplier_id}":{"get":{"tags":["Optimized Buying"],"summary":"Whitelist Supplier Status","description":"Latest VAT check dla pojedynczego dostawcy — używane w supplier card.","operationId":"whitelist_supplier_status_api_v1_buying_whitelist_supplier__supplier_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"supplier_id","in":"path","required":true,"schema":{"type":"string","title":"Supplier Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/buying/erp/status":{"get":{"tags":["Optimized Buying"],"summary":"Erp Status Endpoint","description":"Show which ERP backend Flow is configured to push POs to.\nFrontend renders a 'Connected: SAP S/4HANA' badge on the dashboard so\nthe buyer sees there's a live ERP commitment behind every PO.","operationId":"erp_status_endpoint_api_v1_buying_erp_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/buying/fx/rates":{"get":{"tags":["Optimized Buying"],"summary":"Fx Rates","description":"Return supported currencies + their PLN rates.\nFrontend reads this to render dual currency labels on POs/invoices.","operationId":"fx_rates_api_v1_buying_fx_rates_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/buying/orders/{order_id}/invoices":{"get":{"tags":["Optimized Buying"],"summary":"Order Invoices List","description":"List all invoices attached to this order, with 3-way matching status.","operationId":"order_invoices_list_api_v1_buying_orders__order_id__invoices_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string","title":"Order Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/buying/orders/{order_id}/po/{po_id}/invoices":{"post":{"tags":["Optimized Buying"],"summary":"Order Invoice Create","description":"Supplier issues an invoice for one of their POs. The system runs\n3-way matching against the PO+GR before persisting — invoice surfaces\nin AP queue with green/amber/red status. Mock SMTP path for demo.","operationId":"order_invoice_create_api_v1_buying_orders__order_id__po__po_id__invoices_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string","title":"Order Id"}},{"name":"po_id","in":"path","required":true,"schema":{"type":"string","title":"Po Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvoicePayload"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/buying/orders/{order_id}/po/{po_id}/auto-invoice":{"post":{"tags":["Optimized Buying"],"summary":"Order Invoice Auto Seed","description":"Demo convenience: auto-seed a supplier-side invoice mirroring received\nqty at PO unit_cost. Useful for the \"supplier emailed an invoice\" act.","operationId":"order_invoice_auto_seed_api_v1_buying_orders__order_id__po__po_id__auto_invoice_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string","title":"Order Id"}},{"name":"po_id","in":"path","required":true,"schema":{"type":"string","title":"Po Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/buying/orders/{order_id}/comments":{"get":{"tags":["Optimized Buying"],"summary":"Order Comments List","description":"List comments for a single order. Tenant scoped via context middleware.","operationId":"order_comments_list_api_v1_buying_orders__order_id__comments_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string","title":"Order Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Optimized Buying"],"summary":"Order Comments Add","description":"Append a comment to an order's thread. Author/role come from JWT.","operationId":"order_comments_add_api_v1_buying_orders__order_id__comments_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string","title":"Order Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommentBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/buying/orders/{order_id}/generate-po":{"post":{"tags":["Optimized Buying"],"summary":"Order Generate Po","description":"Generate Purchase Orders from optimized allocations (approved → po_generated).\nSide-effect: pushes each PO to the active ERP backend and stamps the\nreturned external ID so AP can reconcile.","operationId":"order_generate_po_api_v1_buying_orders__order_id__generate_po_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string","title":"Order Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/buying/orders/{order_id}/confirm":{"post":{"tags":["Optimized Buying"],"summary":"Order Confirm","description":"Supplier confirms all POs (po_generated → confirmed). Bulk path; for\nper-PO scope use POST /buying/orders/{order_id}/po/{po_id}/confirm.","operationId":"order_confirm_api_v1_buying_orders__order_id__confirm_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string","title":"Order Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/buying/orders/{order_id}/ship":{"post":{"tags":["Optimized Buying"],"summary":"Order Ship","description":"Mark order as in delivery (confirmed → in_delivery).","operationId":"order_ship_api_v1_buying_orders__order_id__ship_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string","title":"Order Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/buying/orders/{order_id}/deliver":{"post":{"tags":["Optimized Buying"],"summary":"Order Deliver","description":"Mark order as delivered — Goods Receipt (confirmed/in_delivery → delivered).\nBulk path; for per-PO partial GR use\nPOST /buying/orders/{order_id}/po/{po_id}/receive.","operationId":"order_deliver_api_v1_buying_orders__order_id__deliver_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string","title":"Order Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/buying/orders/{order_id}/cancel":{"post":{"tags":["Optimized Buying"],"summary":"Order Cancel","description":"Cancel order at any cancellable stage. Role gate per status:\nbuyer can only cancel pre-PO orders; once POs are generated only\nmanager/admin can cancel; once delivery starts only admin can.\nSee buying_engine._can_cancel for the full matrix.","operationId":"order_cancel_api_v1_buying_orders__order_id__cancel_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string","title":"Order Id"}},{"name":"reason","in":"query","required":false,"schema":{"type":"string","default":"","title":"Reason"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/buying/orders/{order_id}/po/{po_id}/confirm":{"post":{"tags":["Optimized Buying"],"summary":"Po Confirm Endpoint","description":"Supplier confirms a single PO with optional per-line scope.\nSuppliers can only confirm POs that target them; admins bypass.","operationId":"po_confirm_endpoint_api_v1_buying_orders__order_id__po__po_id__confirm_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string","title":"Order Id"}},{"name":"po_id","in":"path","required":true,"schema":{"type":"string","title":"Po Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/POConfirmRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/buying/orders/{order_id}/po/{po_id}/reject":{"post":{"tags":["Optimized Buying"],"summary":"Po Reject Endpoint","description":"Supplier rejects a single PO with a mandatory reason. Optionally\nproposes a counter-offer (alternate qty/price/delivery) — when present,\nPO ends up `rejected_with_counter` instead of plain `rejected`.","operationId":"po_reject_endpoint_api_v1_buying_orders__order_id__po__po_id__reject_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string","title":"Order Id"}},{"name":"po_id","in":"path","required":true,"schema":{"type":"string","title":"Po Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PORejectRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/buying/orders/{order_id}/po/{po_id}/counter-offer/accept":{"post":{"tags":["Optimized Buying"],"summary":"Po Counter Offer Accept","description":"Buyer or manager accepts the supplier's counter-offer. Replaces PO\nlines with proposed quantities/prices and confirms the PO.","operationId":"po_counter_offer_accept_api_v1_buying_orders__order_id__po__po_id__counter_offer_accept_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string","title":"Order Id"}},{"name":"po_id","in":"path","required":true,"schema":{"type":"string","title":"Po Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/buying/orders/{order_id}/po/{po_id}/counter-offer/decline":{"post":{"tags":["Optimized Buying"],"summary":"Po Counter Offer Decline","description":"Buyer or manager declines the supplier's counter-offer; PO becomes\nplain `rejected`.","operationId":"po_counter_offer_decline_api_v1_buying_orders__order_id__po__po_id__counter_offer_decline_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string","title":"Order Id"}},{"name":"po_id","in":"path","required":true,"schema":{"type":"string","title":"Po Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/buying/orders/{order_id}/po/{po_id}/receive":{"post":{"tags":["Optimized Buying"],"summary":"Po Receive Endpoint","description":"Warehouse records cumulative goods receipt quantities for a PO.","operationId":"po_receive_endpoint_api_v1_buying_orders__order_id__po__po_id__receive_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string","title":"Order Id"}},{"name":"po_id","in":"path","required":true,"schema":{"type":"string","title":"Po Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/POReceiveRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/buying/orders/{order_id}/timeline":{"get":{"tags":["Optimized Buying"],"summary":"Order Timeline","description":"Get order audit log / timeline.","operationId":"order_timeline_api_v1_buying_orders__order_id__timeline_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string","title":"Order Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/buying/kpi":{"get":{"tags":["Optimized Buying"],"summary":"Buying Kpi","description":"Aggregate order statistics for dashboard KPI cards.","operationId":"buying_kpi_api_v1_buying_kpi_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/buying/contracts":{"post":{"tags":["Optimized Buying"],"summary":"Buying Contract Upsert","description":"Create or update a contract (upsert on id).\n\nCrossTenantConflict bubbles up to the global handler in main.py and\nis returned as HTTP 409 with a structured detail body.","operationId":"buying_contract_upsert_api_v1_buying_contracts_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContractPayload"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Optimized Buying"],"summary":"Buying Contracts","description":"MVP-4: list supplier contracts (in-memory demo data for now).\n\nWhen `expiring_within_days` is passed, returns only active contracts\nending within that window — convenient for dashboard chips.","operationId":"buying_contracts_api_v1_buying_contracts_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"expiring_within_days","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Expiring Within Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/buying/contracts/{contract_id}":{"delete":{"tags":["Optimized Buying"],"summary":"Buying Contract Delete","operationId":"buying_contract_delete_api_v1_buying_contracts__contract_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"contract_id","in":"path","required":true,"schema":{"type":"string","title":"Contract Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/buying/suppliers/scorecard":{"get":{"tags":["Optimized Buying"],"summary":"Buying Supplier Scorecard","description":"MVP-5: composite supplier scorecard (0–100) merging ESG, compliance,\ncontract status, concentration risk and single-source exposure.\nReturned sorted by composite_score desc.","operationId":"buying_supplier_scorecard_api_v1_buying_suppliers_scorecard_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/buying/contracts/{contract_id}/audit":{"get":{"tags":["Optimized Buying"],"summary":"Buying Contract Audit","description":"Return the audit trail for a single contract (most recent first).\n\nEach entry carries action (create/update/delete), actor, occurred_at,\nand a JSON `diff` with the fields that changed.","operationId":"buying_contract_audit_api_v1_buying_contracts__contract_id__audit_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"contract_id","in":"path","required":true,"schema":{"type":"string","title":"Contract Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/buying/spend-analytics":{"get":{"tags":["Optimized Buying"],"summary":"Buying Spend Analytics","description":"MVP-3: multidimensional spend breakdown for the dashboard widget.\n\nAggregates order line-items by category + Direct/Indirect grouping over\nthe requested window (default: 90 days). Pass period_days=0 for all-time.","operationId":"buying_spend_analytics_api_v1_buying_spend_analytics_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"period_days","in":"query","required":false,"schema":{"type":"integer","default":90,"title":"Period Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/buying/open-in-optimizer":{"post":{"tags":["Optimized Buying"],"summary":"Open In Optimizer","description":"Bridge: map cart items to optimizer demand payload.\n\nReturns a ready-to-use payload for /api/v1/optimize (Tab 1).","operationId":"open_in_optimizer_api_v1_buying_open_in_optimizer_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CartRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/buying/approval-policies":{"get":{"tags":["Optimized Buying","buying","approval"],"summary":"Get current approval workflow configuration","description":"Return approval thresholds, category rules, item policies, and workflow mode.","operationId":"get_policies_api_v1_buying_approval_policies_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"put":{"tags":["Optimized Buying","buying","approval"],"summary":"Update approval workflow configuration","description":"Update approval workflow settings.\n\nFields: workflow_mode, thresholds, category_rules, item_policies.\nOnly provided fields are updated.","operationId":"put_policies_api_v1_buying_approval_policies_put","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/buying/evaluate-approval":{"post":{"tags":["Optimized Buying","buying","approval"],"summary":"Evaluate approval requirements for a cart","description":"Given a cart, evaluate which approval rules apply.\nReturns approval level, required approvers, reasons, and chain.","operationId":"post_evaluate_approval_api_v1_buying_evaluate_approval_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CartRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/cif/upload":{"post":{"tags":["Optimized Buying","buying"],"summary":"Upload CIF file — parse, classify UNSPSC, return items","description":"Upload a CIF (Catalogue Interchange Format) or CSV file.\nParses rows, auto-classifies each item to UNSPSC code,\nand returns structured items with classification.\nNo auth required (demo mode).","operationId":"upload_cif_api_v1_cif_upload_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_cif_api_v1_cif_upload_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/cif/template":{"get":{"tags":["Optimized Buying","buying"],"summary":"Download sample CIF template file","description":"Serve the sample CIF V3.0 template file for download.","operationId":"download_cif_template_api_v1_cif_template_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/unspsc/search":{"get":{"tags":["Optimized Buying","buying"],"summary":"Search UNSPSC codes by keyword or code","description":"Search UNSPSC catalog by keyword (Polish or English) or code prefix.\n\nReturns matching UNSPSC entries sorted by relevance.\nResults include hierarchy level (segment/family/class/commodity).\nAlso runs keyword-based AI suggestion from the query text.","operationId":"search_unspsc_api_v1_unspsc_search_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"type":"string","minLength":1,"default":"","title":"Q"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/marketplace/allegro/auth/start":{"post":{"tags":["Marketplace"],"summary":"Allegro Auth Start","description":"Start Allegro device_code authorization flow.","operationId":"allegro_auth_start_api_v1_marketplace_allegro_auth_start_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/marketplace/allegro/auth/poll":{"post":{"tags":["Marketplace"],"summary":"Allegro Auth Poll","description":"Poll to check if user has authorized the device.","operationId":"allegro_auth_poll_api_v1_marketplace_allegro_auth_poll_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/marketplace/allegro/status":{"get":{"tags":["Marketplace"],"summary":"Allegro Status","description":"Check Allegro API configuration and auth status.","operationId":"allegro_status_api_v1_marketplace_allegro_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/marketplace/allegro/callback":{"get":{"tags":["Marketplace"],"summary":"Allegro Callback","description":"OAuth2 callback — exchange authorization code for token.","operationId":"allegro_callback_api_v1_marketplace_allegro_callback_get","parameters":[{"name":"code","in":"query","required":false,"schema":{"type":"string","title":"Code"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/marketplace/allegro/search":{"get":{"tags":["Marketplace"],"summary":"Allegro Search","description":"Search Allegro marketplace for products.","operationId":"allegro_search_api_v1_marketplace_allegro_search_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":1,"description":"Search query","title":"Q"},"description":"Search query"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":60,"minimum":1,"default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/marketplace/punchout/setup":{"post":{"tags":["Marketplace"],"summary":"Po Setup","description":"Create a new PunchOut session. Returns cXML SetupResponse.","operationId":"po_setup_api_v1_marketplace_punchout_setup_post","requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/PunchOutSetupRequest"},{"type":"null"}],"title":"Req"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/marketplace/punchout/browse/{session_id}":{"get":{"tags":["Marketplace"],"summary":"Po Browse","description":"Browse PunchOut catalog (Allegro + enterprise items).","operationId":"po_browse_api_v1_marketplace_punchout_browse__session_id__get","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}},{"name":"category","in":"query","required":false,"schema":{"type":"string","description":"Filter by category","default":"","title":"Category"},"description":"Filter by category"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/marketplace/punchout/cart/{session_id}":{"post":{"tags":["Marketplace"],"summary":"Po Add To Cart","description":"Add item to PunchOut session cart.","operationId":"po_add_to_cart_api_v1_marketplace_punchout_cart__session_id__post","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PunchOutCartItem"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/marketplace/punchout/return/{session_id}":{"post":{"tags":["Marketplace"],"summary":"Po Return","description":"Finalize PunchOut session and return cart as cXML PunchOutOrderMessage.","operationId":"po_return_api_v1_marketplace_punchout_return__session_id__post","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/marketplace/punchout/sessions":{"get":{"tags":["Marketplace"],"summary":"Po Sessions","description":"List all PunchOut sessions (admin/debug).","operationId":"po_sessions_api_v1_marketplace_punchout_sessions_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/suppliers/":{"get":{"tags":["Supplier Management","suppliers"],"summary":"List all suppliers","operationId":"api_list_suppliers_api_v1_suppliers__get","parameters":[{"name":"domain","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by domain","title":"Domain"},"description":"Filter by domain"},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search by name/NIP/address","title":"Search"},"description":"Search by name/NIP/address"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Supplier Management","suppliers"],"summary":"Create supplier from NIP","operationId":"api_create_supplier_api_v1_suppliers__post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SupplierCreateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SupplierProfile"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/suppliers/certificates/expiring":{"get":{"tags":["Supplier Management","suppliers"],"summary":"List expiring certificates","operationId":"api_expiring_certs_api_v1_suppliers_certificates_expiring_get","parameters":[{"name":"days_ahead","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"default":90,"title":"Days Ahead"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/suppliers/assessment/questions":{"get":{"tags":["Supplier Management","suppliers"],"summary":"Self-assessment questionnaire","operationId":"api_assessment_questions_api_v1_suppliers_assessment_questions_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/suppliers/{supplier_id}":{"get":{"tags":["Supplier Management","suppliers"],"summary":"Get supplier profile","operationId":"api_get_supplier_api_v1_suppliers__supplier_id__get","parameters":[{"name":"supplier_id","in":"path","required":true,"schema":{"type":"string","title":"Supplier Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SupplierProfile"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Supplier Management","suppliers"],"summary":"Update supplier","operationId":"api_update_supplier_api_v1_suppliers__supplier_id__put","parameters":[{"name":"supplier_id","in":"path","required":true,"schema":{"type":"string","title":"Supplier Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Updates"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SupplierProfile"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Supplier Management","suppliers"],"summary":"Delete supplier","operationId":"api_delete_supplier_api_v1_suppliers__supplier_id__delete","parameters":[{"name":"supplier_id","in":"path","required":true,"schema":{"type":"string","title":"Supplier Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/suppliers/vies-lookup":{"post":{"tags":["Supplier Management","suppliers"],"summary":"VIES VAT lookup","operationId":"api_vies_lookup_api_v1_suppliers_vies_lookup_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ViesLookupRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ViesLookupResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/suppliers/{supplier_id}/certificates":{"post":{"tags":["Supplier Management","suppliers"],"summary":"Add certificate","operationId":"api_add_cert_api_v1_suppliers__supplier_id__certificates_post","parameters":[{"name":"supplier_id","in":"path","required":true,"schema":{"type":"string","title":"Supplier Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SupplierCertificate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SupplierProfile"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/suppliers/{supplier_id}/certificates/{cert_id}":{"delete":{"tags":["Supplier Management","suppliers"],"summary":"Remove certificate","operationId":"api_remove_cert_api_v1_suppliers__supplier_id__certificates__cert_id__delete","parameters":[{"name":"supplier_id","in":"path","required":true,"schema":{"type":"string","title":"Supplier Id"}},{"name":"cert_id","in":"path","required":true,"schema":{"type":"string","title":"Cert Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SupplierProfile"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/suppliers/{supplier_id}/contacts":{"post":{"tags":["Supplier Management","suppliers"],"summary":"Add contact person","operationId":"api_add_contact_api_v1_suppliers__supplier_id__contacts_post","parameters":[{"name":"supplier_id","in":"path","required":true,"schema":{"type":"string","title":"Supplier Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactPerson"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SupplierProfile"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/suppliers/{supplier_id}/contacts/{contact_id}":{"delete":{"tags":["Supplier Management","suppliers"],"summary":"Remove contact","operationId":"api_remove_contact_api_v1_suppliers__supplier_id__contacts__contact_id__delete","parameters":[{"name":"supplier_id","in":"path","required":true,"schema":{"type":"string","title":"Supplier Id"}},{"name":"contact_id","in":"path","required":true,"schema":{"type":"string","title":"Contact Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SupplierProfile"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/suppliers/{supplier_id}/assessment":{"post":{"tags":["Supplier Management","suppliers"],"summary":"Submit self-assessment","operationId":"api_submit_assessment_api_v1_suppliers__supplier_id__assessment_post","parameters":[{"name":"supplier_id","in":"path","required":true,"schema":{"type":"string","title":"Supplier Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SelfAssessmentAnswer"},"title":"Answers"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/suppliers/{supplier_id}/optimizer-input":{"get":{"tags":["Supplier Management","suppliers"],"summary":"Get optimizer SupplierInput","operationId":"api_optimizer_input_api_v1_suppliers__supplier_id__optimizer_input_get","parameters":[{"name":"supplier_id","in":"path","required":true,"schema":{"type":"string","title":"Supplier Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/suppliers/{supplier_id}/run-optimization":{"post":{"tags":["Supplier Management","suppliers"],"summary":"Run optimization with this supplier","description":"Run optimization injecting this supplier's profile into domain data.","operationId":"api_run_optimization_api_v1_suppliers__supplier_id__run_optimization_post","parameters":[{"name":"supplier_id","in":"path","required":true,"schema":{"type":"string","title":"Supplier Id"}},{"name":"domain","in":"query","required":false,"schema":{"type":"string","default":"parts","title":"Domain"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/ewm/status":{"get":{"tags":["EWM Integration"],"summary":"Ewm Status","description":"Return the EWM connection status.\n\nIn the real integration this would ping the EWM health-check\nendpoint and report latency, authentication state, and API version.","operationId":"ewm_status_api_v1_ewm_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/ewm/stock/{product_id}":{"get":{"tags":["EWM Integration"],"summary":"Ewm Stock Single","description":"Return stock levels for a single product.\n\nThe real integration would call the EWM stock enquiry API,\nreturning live available quantity, reserved quantity, and\nwarehouse location(s).","operationId":"ewm_stock_single_api_v1_ewm_stock__product_id__get","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/ewm/stock":{"get":{"tags":["EWM Integration"],"summary":"Ewm Stock Bulk","description":"Return stock levels for multiple products in one call.\n\nThe real integration would batch-query the EWM inventory API and\nreturn consolidated availability across all requested SKUs.","operationId":"ewm_stock_bulk_api_v1_ewm_stock_get","parameters":[{"name":"product_ids","in":"query","required":true,"schema":{"type":"string","description":"Comma-separated list of product IDs","examples":["IC-001,IC-002,IC-003"],"title":"Product Ids"},"description":"Comma-separated list of product IDs"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/ewm/goods-receipt":{"post":{"tags":["EWM Integration"],"summary":"Ewm Goods Receipt","description":"Confirm goods receipt from a delivery.\n\nThe real integration would post the inbound delivery confirmation\nto EWM, updating on-hand inventory and triggering put-away tasks.","operationId":"ewm_goods_receipt_api_v1_ewm_goods_receipt_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GoodsReceiptRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/ewm/reservation":{"post":{"tags":["EWM Integration"],"summary":"Ewm Reservation","description":"Create a stock reservation for an order.\n\nThe real integration would call the EWM reservation API to lock\nthe requested quantity, preventing it from being allocated\nelsewhere until the reservation is consumed or cancelled.","operationId":"ewm_reservation_api_v1_ewm_reservation_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReservationRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/ewm/warehouses":{"get":{"tags":["EWM Integration"],"summary":"Ewm Warehouses","description":"List available warehouses.\n\nThe real integration would fetch the warehouse master-data from\nEWM, including capacity, address, and operational status.","operationId":"ewm_warehouses_api_v1_ewm_warehouses_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/ewm/movements":{"get":{"tags":["EWM Integration"],"summary":"Ewm Movements","description":"Return recent stock movements.\n\nThe real integration would query the EWM movement log, returning\ngoods issues, goods receipts, transfers, and adjustments within\na configurable time window.","operationId":"ewm_movements_api_v1_ewm_movements_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/auctions/":{"post":{"tags":["Auctions / E-Sourcing"],"summary":"Api Create Auction","description":"Utwórz nową aukcję odwróconą.","operationId":"api_create_auction_api_v1_auctions__post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuctionCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Api Create Auction Api V1 Auctions  Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Auctions / E-Sourcing"],"summary":"Api List Auctions","description":"Lista aukcji (buyer view).","operationId":"api_list_auctions_api_v1_auctions__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"domain","in":"query","required":false,"schema":{"type":"string","description":"Filtruj po domenie","default":"","title":"Domain"},"description":"Filtruj po domenie"},{"name":"status","in":"query","required":false,"schema":{"type":"string","description":"Filtruj po statusie","default":"","title":"Status"},"description":"Filtruj po statusie"},{"name":"supplier","in":"query","required":false,"schema":{"type":"string","description":"Filtruj po supplier_id (zaproszeni dostawcy)","default":"","title":"Supplier"},"description":"Filtruj po supplier_id (zaproszeni dostawcy)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Api List Auctions Api V1 Auctions  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auctions/demo":{"get":{"tags":["Auctions / E-Sourcing"],"summary":"Api Demo Auction","description":"Utwórz demo aukcję z przykładowymi ofertami. Public — demo entrypoint.","operationId":"api_demo_auction_api_v1_auctions_demo_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Api Demo Auction Api V1 Auctions Demo Get"}}}}}}},"/api/v1/auctions/{auction_id}":{"get":{"tags":["Auctions / E-Sourcing"],"summary":"Api Get Auction","description":"Szczegóły aukcji.","operationId":"api_get_auction_api_v1_auctions__auction_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"auction_id","in":"path","required":true,"schema":{"type":"string","title":"Auction Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Api Get Auction Api V1 Auctions  Auction Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auctions/{auction_id}/ranking":{"get":{"tags":["Auctions / E-Sourcing"],"summary":"Api Get Ranking","description":"Ranking ofert dla aukcji (lub konkretnej pozycji).","operationId":"api_get_ranking_api_v1_auctions__auction_id__ranking_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"auction_id","in":"path","required":true,"schema":{"type":"string","title":"Auction Id"}},{"name":"line_id","in":"query","required":false,"schema":{"type":"string","default":"","title":"Line Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Api Get Ranking Api V1 Auctions  Auction Id  Ranking Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auctions/{auction_id}/stats":{"get":{"tags":["Auctions / E-Sourcing"],"summary":"Api Get Stats","description":"Statystyki aukcji — dashboard kupca.","operationId":"api_get_stats_api_v1_auctions__auction_id__stats_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"auction_id","in":"path","required":true,"schema":{"type":"string","title":"Auction Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Api Get Stats Api V1 Auctions  Auction Id  Stats Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auctions/{auction_id}/publish":{"post":{"tags":["Auctions / E-Sourcing"],"summary":"Api Publish","description":"Opublikuj aukcję — widoczna dla dostawców.","operationId":"api_publish_api_v1_auctions__auction_id__publish_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"auction_id","in":"path","required":true,"schema":{"type":"string","title":"Auction Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Api Publish Api V1 Auctions  Auction Id  Publish Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auctions/{auction_id}/start":{"post":{"tags":["Auctions / E-Sourcing"],"summary":"Api Start","description":"Rozpocznij aktywną fazę licytacji.","operationId":"api_start_api_v1_auctions__auction_id__start_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"auction_id","in":"path","required":true,"schema":{"type":"string","title":"Auction Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Api Start Api V1 Auctions  Auction Id  Start Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auctions/{auction_id}/close":{"post":{"tags":["Auctions / E-Sourcing"],"summary":"Api Close","description":"Zamknij aukcję — koniec licytacji.","operationId":"api_close_api_v1_auctions__auction_id__close_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"auction_id","in":"path","required":true,"schema":{"type":"string","title":"Auction Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Api Close Api V1 Auctions  Auction Id  Close Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auctions/{auction_id}/award":{"post":{"tags":["Auctions / E-Sourcing"],"summary":"Api Award","description":"Przyznaj aukcję wybranemu dostawcy.","operationId":"api_award_api_v1_auctions__auction_id__award_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"auction_id","in":"path","required":true,"schema":{"type":"string","title":"Auction Id"}},{"name":"supplier_id","in":"query","required":true,"schema":{"type":"string","title":"Supplier Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Api Award Api V1 Auctions  Auction Id  Award Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auctions/{auction_id}/cancel":{"post":{"tags":["Auctions / E-Sourcing"],"summary":"Api Cancel","description":"Anuluj aukcję.","operationId":"api_cancel_api_v1_auctions__auction_id__cancel_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"auction_id","in":"path","required":true,"schema":{"type":"string","title":"Auction Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Api Cancel Api V1 Auctions  Auction Id  Cancel Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auctions/{auction_id}/bid":{"post":{"tags":["Auctions / E-Sourcing"],"summary":"Api Submit Bid","description":"Złóż ofertę.\n\nBezpieczeństwo: dla roli `supplier` bidder identity jest wymuszany z JWT\n(claim `supplier_id`) — query stringi `supplier_id`/`supplier_name` są\nignorowane. Bez tego TRW mógł licytować jako BREMBO przez podmianę\n`?supplier_id=BREMBO-001` w URL (impersonacja konkurencji, sabotaż\naukcji — zgłoszone podczas bugbash 2026-04-26).\n\nBuyer/manager/admin (role > supplier) MOGĄ przekazać query supplier_id\n— używane do testowych bidów / override przy negocjacji w imieniu\ndostawcy. Wszystkie inne role bez own supplier_id w JWT → 403.","operationId":"api_submit_bid_api_v1_auctions__auction_id__bid_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"auction_id","in":"path","required":true,"schema":{"type":"string","title":"Auction Id"}},{"name":"supplier_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Supplier Id"}},{"name":"supplier_name","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Supplier Name"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BidSubmit"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Api Submit Bid Api V1 Auctions  Auction Id  Bid Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/predictions/demo":{"get":{"tags":["Predictive Analytics & AI Copilot"],"summary":"Api Demo Predictions","description":"Demo predykcje opóźnień dla przykładowych zamówień.\n\nResponse zawiera tez pola wizualizacyjne: monthly_breakdown (24 miesiace\norderow + delay rate), scoring (composite breakdown per dostawca) i\nevent_count (naglowek 'ile danych widzi model').","operationId":"api_demo_predictions_api_v1_predictions_demo_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Api Demo Predictions Api V1 Predictions Demo Get"}}}}}}},"/api/v1/predictions/predict":{"post":{"tags":["Predictive Analytics & AI Copilot"],"summary":"Api Predict Delay","description":"Predykcja opóźnienia dla konkretnego zamówienia.","operationId":"api_predict_delay_api_v1_predictions_predict_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PredictionInput"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Api Predict Delay Api V1 Predictions Predict Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/predictions/train":{"post":{"tags":["Predictive Analytics & AI Copilot"],"summary":"Api Train Model","description":"Trenuj model na danych zdarzeń P2P. Zwraca profile dostawców.","operationId":"api_train_model_api_v1_predictions_train_post","requestBody":{"content":{"application/json":{"schema":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Events"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Api Train Model Api V1 Predictions Train Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/predictions/alerts":{"get":{"tags":["Predictive Analytics & AI Copilot"],"summary":"Api Predictive Alerts","description":"Alerty predykcyjne na bazie profili dostawców.","operationId":"api_predictive_alerts_api_v1_predictions_alerts_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Api Predictive Alerts Api V1 Predictions Alerts Get"}}}}}}},"/api/v1/predictions/profiles":{"get":{"tags":["Predictive Analytics & AI Copilot"],"summary":"Api Supplier Profiles","description":"Profile wydajności dostawców zbudowane z historii P2P.","operationId":"api_supplier_profiles_api_v1_predictions_profiles_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Api Supplier Profiles Api V1 Predictions Profiles Get"}}}}}}},"/api/v1/copilot/chat":{"post":{"tags":["Predictive Analytics & AI Copilot"],"summary":"Api Copilot Chat","description":"AI Copilot — asystent zakupowy w języku naturalnym.","operationId":"api_copilot_chat_api_v1_copilot_chat_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CopilotRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Api Copilot Chat Api V1 Copilot Chat Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/copilot/chat/stream":{"post":{"tags":["Predictive Analytics & AI Copilot"],"summary":"Api Copilot Chat Stream","description":"SSE variant of /copilot/chat — streams Sonnet/Haiku replies token-by-token.\n\nFrontend (copilot.js sendCopilotMsg) consumes via fetch + ReadableStream\nreader so the chat bubble assembles live instead of waiting 2-6 s for the\nwhole reply. Regex/intent matches still emit a single 'reply' event\n(instant). Header `X-Accel-Buffering: no` disables Railway/nginx response\nbuffering so chunks reach the browser as they're produced.","operationId":"api_copilot_chat_stream_api_v1_copilot_chat_stream_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CopilotRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/copilot/conversational-intake":{"post":{"tags":["Predictive Analytics & AI Copilot"],"summary":"Api Copilot Conversational Intake","description":"F1.2 — Coupa Navi-style intake.\n\nTakes a free-text Polish description of what the buyer needs and returns\nstructured items + urgency + deadline + clarifying questions, ready to\nprefill Step 1 ad-hoc rows. Sonnet path; falls back to an empty payload\nwhen the LLM key is missing.","operationId":"api_copilot_conversational_intake_api_v1_copilot_conversational_intake_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntakeRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Api Copilot Conversational Intake Api V1 Copilot Conversational Intake Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/copilot/document/extract":{"post":{"tags":["Predictive Analytics & AI Copilot"],"summary":"Api Copilot Document Extract","description":"Extract demand line-items from a pasted email / document / text block.\n\nReturns catalog-matched items ready for 1-click add-to-cart.","operationId":"api_copilot_document_extract_api_v1_copilot_document_extract_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DocumentExtractRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Api Copilot Document Extract Api V1 Copilot Document Extract Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/copilot/document/extract-file":{"post":{"tags":["Predictive Analytics & AI Copilot"],"summary":"Api Copilot Document Extract File","description":"MVP-2b: upload a PDF / DOCX / EML / TXT file, extract demand items.\n\nPipeline: read bytes → document_parser.extract_text (pypdf / python-docx\n/ stdlib email) → extract_demand (Claude Haiku + catalog match).\nPayload mirrors the paste endpoint so frontend can reuse the renderer.","operationId":"api_copilot_document_extract_file_api_v1_copilot_document_extract_file_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_api_copilot_document_extract_file_api_v1_copilot_document_extract_file_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Api Copilot Document Extract File Api V1 Copilot Document Extract File Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/copilot/recommendations":{"get":{"tags":["Predictive Analytics & AI Copilot"],"summary":"Api Copilot Recommendations","description":"Proactive action cards for the assistant dashboard (Step 0).\n\nMixes real signals (pending approvals from buying_engine) with static\ndemo stubs for contract expiry, spend trends, and single-source risk.\nMVP-4 will swap internals for RecommendationEngine with contracts + BI.","operationId":"api_copilot_recommendations_api_v1_copilot_recommendations_get","parameters":[{"name":"step","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Step"}},{"name":"domain","in":"query","required":false,"schema":{"type":"string","default":"","title":"Domain"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Api Copilot Recommendations Api V1 Copilot Recommendations Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/copilot/suggestions":{"get":{"tags":["Predictive Analytics & AI Copilot"],"summary":"Api Copilot Suggestions","description":"Kontekstowe sugestie AI Copilot dla danego kroku.","operationId":"api_copilot_suggestions_api_v1_copilot_suggestions_get","parameters":[{"name":"step","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Step"}},{"name":"domain","in":"query","required":false,"schema":{"type":"string","default":"parts","title":"Domain"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Api Copilot Suggestions Api V1 Copilot Suggestions Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects":{"post":{"tags":["projects"],"summary":"Create Project","description":"Create a new purchase project.","operationId":"create_project_api_v1_projects_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateProjectRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["projects"],"summary":"List Projects","description":"List projects, optionally filtered.","operationId":"list_projects_api_v1_projects_get","parameters":[{"name":"requester","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Requester"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/stats":{"get":{"tags":["projects"],"summary":"Project Stats","description":"Get project statistics.","operationId":"project_stats_api_v1_projects_stats_get","parameters":[{"name":"requester","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Requester"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}":{"get":{"tags":["projects"],"summary":"Get Project","description":"Get project details.","operationId":"get_project_api_v1_projects__project_id__get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/transition":{"put":{"tags":["projects"],"summary":"Transition Project","description":"Transition project status.","operationId":"transition_project_api_v1_projects__project_id__transition_put","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransitionRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/submit":{"put":{"tags":["projects"],"summary":"Submit Project","description":"Submit project for approval (shortcut).","operationId":"submit_project_api_v1_projects__project_id__submit_put","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"actor","in":"query","required":false,"schema":{"type":"string","default":"buyer@flowproc.eu","title":"Actor"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/approve":{"put":{"tags":["projects"],"summary":"Approve Project","description":"Approve project (shortcut).","operationId":"approve_project_api_v1_projects__project_id__approve_put","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"actor","in":"query","required":false,"schema":{"type":"string","default":"manager@flowproc.eu","title":"Actor"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/budget":{"get":{"tags":["projects"],"summary":"Check Budget","description":"Check project budget.","operationId":"check_budget_api_v1_projects__project_id__budget_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"actor","in":"query","required":false,"schema":{"type":"string","default":"buyer@flowproc.eu","title":"Actor"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/items":{"put":{"tags":["projects"],"summary":"Update Items","description":"Update project items (draft only).","operationId":"update_items_api_v1_projects__project_id__items_put","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateItemsRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/comments":{"post":{"tags":["projects"],"summary":"Add Comment","description":"Add comment to project.","operationId":"add_comment_api_v1_projects__project_id__comments_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommentRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/link-order":{"put":{"tags":["projects"],"summary":"Link Order","description":"Link an order to the project.","operationId":"link_order_api_v1_projects__project_id__link_order_put","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"order_id","in":"query","required":true,"schema":{"type":"string","title":"Order Id"}},{"name":"actor","in":"query","required":false,"schema":{"type":"string","default":"buyer@flowproc.eu","title":"Actor"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/bi/status":{"get":{"tags":["BI / ERP / WMS Integration (simulated)"],"summary":"Bi Status","description":"List every registered connector and its health snapshot.","operationId":"bi_status_api_v1_bi_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/bi/erp/invoices":{"get":{"tags":["BI / ERP / WMS Integration (simulated)"],"summary":"Bi Erp Invoices","operationId":"bi_erp_invoices_api_v1_bi_erp_invoices_get","parameters":[{"name":"months","in":"query","required":false,"schema":{"type":"integer","maximum":24,"minimum":1,"default":3,"title":"Months"}},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"}},{"name":"supplier_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Supplier Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/bi/erp/purchase-orders":{"get":{"tags":["BI / ERP / WMS Integration (simulated)"],"summary":"Bi Erp Purchase Orders","operationId":"bi_erp_purchase_orders_api_v1_bi_erp_purchase_orders_get","parameters":[{"name":"months","in":"query","required":false,"schema":{"type":"integer","maximum":24,"minimum":1,"default":3,"title":"Months"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/bi/erp/budget":{"get":{"tags":["BI / ERP / WMS Integration (simulated)"],"summary":"Bi Erp Budget","operationId":"bi_erp_budget_api_v1_bi_erp_budget_get","parameters":[{"name":"year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Year"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/bi/warehouse/spend-history":{"get":{"tags":["BI / ERP / WMS Integration (simulated)"],"summary":"Bi Spend History","operationId":"bi_spend_history_api_v1_bi_warehouse_spend_history_get","parameters":[{"name":"months","in":"query","required":false,"schema":{"type":"integer","maximum":36,"minimum":1,"default":24,"title":"Months"}},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/bi/warehouse/yoy-anomalies":{"get":{"tags":["BI / ERP / WMS Integration (simulated)"],"summary":"Bi Yoy Anomalies","operationId":"bi_yoy_anomalies_api_v1_bi_warehouse_yoy_anomalies_get","parameters":[{"name":"threshold_pct","in":"query","required":false,"schema":{"type":"number","maximum":100.0,"minimum":5.0,"default":20.0,"title":"Threshold Pct"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/bi/crm/demand-forecast":{"get":{"tags":["BI / ERP / WMS Integration (simulated)"],"summary":"Bi Demand Forecast","operationId":"bi_demand_forecast_api_v1_bi_crm_demand_forecast_get","parameters":[{"name":"horizon_weeks","in":"query","required":false,"schema":{"type":"integer","maximum":52,"minimum":1,"default":12,"title":"Horizon Weeks"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/bi/finance/cash-position":{"get":{"tags":["BI / ERP / WMS Integration (simulated)"],"summary":"Bi Cash Position","operationId":"bi_cash_position_api_v1_bi_finance_cash_position_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/bi/finance/overdue":{"get":{"tags":["BI / ERP / WMS Integration (simulated)"],"summary":"Bi Overdue","operationId":"bi_overdue_api_v1_bi_finance_overdue_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/bi/wms/stock":{"get":{"tags":["BI / ERP / WMS Integration (simulated)"],"summary":"Bi Wms Stock","operationId":"bi_wms_stock_api_v1_bi_wms_stock_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/reports/executive-brief":{"get":{"tags":["Reports"],"summary":"Api Executive Brief","description":"Compose an executive brief — metrics + AI narrative.","operationId":"api_executive_brief_api_v1_reports_executive_brief_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"period_days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":7,"description":"Okres raportu w dniach","default":30,"title":"Period Days"},"description":"Okres raportu w dniach"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Api Executive Brief Api V1 Reports Executive Brief Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/reports/executive-brief/offline":{"get":{"tags":["Reports"],"summary":"Api Executive Brief Offline","description":"Dry-run variant — skips the LLM call and returns the template\nnarrative. Useful for local dev without LLM keys and for preview\nbuttons that should stay cheap.","operationId":"api_executive_brief_offline_api_v1_reports_executive_brief_offline_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"period_days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":7,"default":30,"title":"Period Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Api Executive Brief Offline Api V1 Reports Executive Brief Offline Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/compliance/rules":{"get":{"tags":["Compliance"],"summary":"Api Compliance Rules","description":"Return the rulebook — defaults + custom rules added via admin UI.\nSet `include_custom=false` to get only the locked-in defaults.","operationId":"api_compliance_rules_api_v1_compliance_rules_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"include_custom","in":"query","required":false,"schema":{"type":"boolean","description":"Merge admin-added custom rules","default":true,"title":"Include Custom"},"description":"Merge admin-added custom rules"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Api Compliance Rules Api V1 Compliance Rules Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Compliance"],"summary":"Api Compliance Add Rule","description":"Persist a custom DECLARE rule (admin-driven 'policy as code').\nReturns 400 on id collision with defaults.","operationId":"api_compliance_add_rule_api_v1_compliance_rules_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ComplianceRule"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Api Compliance Add Rule Api V1 Compliance Rules Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/compliance/rules/{rule_id}":{"delete":{"tags":["Compliance"],"summary":"Api Compliance Delete Rule","operationId":"api_compliance_delete_rule_api_v1_compliance_rules__rule_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"rule_id","in":"path","required":true,"schema":{"type":"string","title":"Rule Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Api Compliance Delete Rule Api V1 Compliance Rules  Rule Id  Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/compliance/rules/custom":{"get":{"tags":["Compliance"],"summary":"Api Compliance List Custom","operationId":"api_compliance_list_custom_api_v1_compliance_rules_custom_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Api Compliance List Custom Api V1 Compliance Rules Custom Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/compliance/demo":{"get":{"tags":["Compliance"],"summary":"Api Compliance Demo","description":"Convenience endpoint — runs default rules on the built-in P2P demo.","operationId":"api_compliance_demo_api_v1_compliance_demo_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"inject_violations","in":"query","required":false,"schema":{"type":"boolean","description":"Inject synthetic policy breaches so the widget surfaces something. Set false to evaluate the clean demo log (100% conformance).","default":true,"title":"Inject Violations"},"description":"Inject synthetic policy breaches so the widget surfaces something. Set false to evaluate the clean demo log (100% conformance)."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Api Compliance Demo Api V1 Compliance Demo Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/compliance/check":{"post":{"tags":["Compliance"],"summary":"Api Compliance Check","description":"Evaluate a caller-supplied event log against declarative rules.","operationId":"api_compliance_check_api_v1_compliance_check_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Api Compliance Check Api V1 Compliance Check Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/audit/timeline":{"get":{"tags":["Audit"],"summary":"Api Audit Timeline","description":"Unified audit timeline — UNION of order_events + contract_audit, optionally\nmerged with compliance + conformance violations (Sprint A.3). Each entry\ncarries a `kind` discriminator so the UI can render violations red.","operationId":"api_audit_timeline_api_v1_audit_timeline_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"actor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Exact actor match","title":"Actor"},"description":"Exact actor match"},{"name":"action","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Partial action name (LIKE)","title":"Action"},"description":"Partial action name (LIKE)"},{"name":"since","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ISO timestamp — keep events >= this","title":"Since"},"description":"ISO timestamp — keep events >= this"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":200,"title":"Limit"}},{"name":"include_violations","in":"query","required":false,"schema":{"type":"boolean","description":"Merge compliance + conformance violations as event-shaped rows","default":false,"title":"Include Violations"},"description":"Merge compliance + conformance violations as event-shaped rows"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Api Audit Timeline Api V1 Audit Timeline Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/audit/export-html":{"get":{"tags":["Audit"],"summary":"Audit Export Html","description":"Generate audit-ready HTML (Content-Type: text/html) z embedded\nprint CSS — auditor drukuje do PDF z Chrome/Edge.\n\nPolski audit format (KAS/US/CIT-friendly):\n  • Header: Flow Procurement · Tenant · Period · Wygenerowano (ISO)\n  • Table: timestamp · źródło (audit/order/DECLARE/BPMN) · actor ·\n    action · entity · note\n  • Footer: HMAC sygnatura (FLOW_JWT_SECRET) · timestamp · liczba\n    wpisów (proof of integrity).\n\nKonkurencja Coupa/Ariba: audit po angielsku, wymaga BI extracts.\nMy: jeden klik, gotowy PDF do urzędu skarbowego.","operationId":"audit_export_html_api_v1_audit_export_html_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"since","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ISO date YYYY-MM-DD","title":"Since"},"description":"ISO date YYYY-MM-DD"},{"name":"until","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ISO date YYYY-MM-DD","title":"Until"},"description":"ISO date YYYY-MM-DD"},{"name":"scope","in":"query","required":false,"schema":{"type":"string","pattern":"^(all|orders|contracts|violations)$","default":"all","title":"Scope"}},{"name":"include_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Include Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/audit/stats":{"get":{"tags":["Audit"],"summary":"Api Audit Stats","description":"Aggregate stats for audit dashboard header cards.","operationId":"api_audit_stats_api_v1_audit_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Api Audit Stats Api V1 Audit Stats Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/notifications":{"get":{"tags":["notifications"],"summary":"Get Notifications","description":"List my notifications, newest first. Tenant + recipient scoped.","operationId":"get_notifications_api_v1_notifications_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/notifications/unread-count":{"get":{"tags":["notifications"],"summary":"Get Unread Count","description":"Cheap polling endpoint for the bell badge.\n\nSupports If-None-Match: when the unread count and max notification id\nhaven't changed since the client's last poll, returns 304 Not Modified\nwith no body. ETag format: weak tag `W/\"<unread>-<max_id>\"`.","operationId":"get_unread_count_api_v1_notifications_unread_count_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"if-none-match","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"If-None-Match"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/notifications/{notif_id}/read":{"post":{"tags":["notifications"],"summary":"Post Mark Read","operationId":"post_mark_read_api_v1_notifications__notif_id__read_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"notif_id","in":"path","required":true,"schema":{"type":"integer","title":"Notif Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/notifications/read-all":{"post":{"tags":["notifications"],"summary":"Post Mark All Read","operationId":"post_mark_all_read_api_v1_notifications_read_all_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/auth/login":{"post":{"tags":["auth"],"summary":"Login → JWT tokens","operationId":"login_auth_login_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/refresh":{"post":{"tags":["auth"],"summary":"Refresh access token","description":"Exchange a valid refresh token for a new access + refresh token pair.","operationId":"refresh_auth_refresh_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RefreshTokenRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/me":{"get":{"tags":["auth"],"summary":"Current user profile","operationId":"me_auth_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/auth/change-password":{"post":{"tags":["auth"],"summary":"Change password","operationId":"change_password_auth_change_password_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChangePasswordRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/auth/admin/seed-demo-users":{"post":{"tags":["auth"],"summary":"Re-run demo user seeding (super_admin only)","description":"Force-seed the documented demo users (admin/buyer/trw/brembo/...).\n\nMissing rows are created; existing rows are left alone unless\n`reset_existing=true` is passed (then their password_hash is\nrewritten to the documented default).\n\nRecovery path when `FLOW_RESET_DEMO_USERS` env reseed didn't fire\nfor some users — e.g. first deploy finished seed before the env\nvar reached the container, or rows existed in a different tenant.","operationId":"admin_seed_demo_users_auth_admin_seed_demo_users_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"reset_existing","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Reset Existing"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/admin/seed-contracts":{"post":{"tags":["auth"],"summary":"Force-seed demo contracts into the active database (super_admin only)","description":"Delete + re-insert the 5 demo contracts. Surfaces every DB\nexception so we can diagnose issues without combing through logs.\n\nBuilt for the Turso switchover: first read auto-seeds, but if that\nfirst read raced with init_db or the contracts table didn't exist\nyet the seed silently failed — this endpoint forces a clean retry.","operationId":"admin_seed_contracts_auth_admin_seed_contracts_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/auth/admin/users/{username}/reset-password":{"post":{"tags":["auth"],"summary":"Force-reset another user's password (super_admin only)","description":"Recovery path for ops: when seed_admin can't reseed a stale row\n(unique-constraint collision across tenants, manual edit, ...), a\nsuper_admin can call this directly.\n\nTenant-scoped (#71 audit 2.2): now that username is UNIQUE(username,\ntenant_id), the same username can exist in multiple tenants. Super_\nadmin must specify `?tenant_id=` query param to disambiguate. If only\none row matches, the param is optional (back-compat).\n\nAudit-friendly: the acting super_admin is in the JWT, so every reset\nshows up in the JSON logs with their user id.","operationId":"admin_reset_password_auth_admin_users__username__reset_password_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"username","in":"path","required":true,"schema":{"type":"string","title":"Username"}},{"name":"tenant_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tenant Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminResetPasswordRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/register":{"post":{"tags":["auth"],"summary":"Register new user (admin only)","operationId":"register_auth_register_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegisterRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/admin/unspsc/search":{"get":{"tags":["backoffice"],"summary":"Search UNSPSC codes","operationId":"search_unspsc_admin_unspsc_search_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"type":"string","description":"Search text","default":"","title":"Q"},"description":"Search text"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/duns/lookup":{"get":{"tags":["backoffice"],"summary":"Lookup DUNS number by NIP","description":"Lookup DUNS number from Dun & Bradstreet by NIP.\nIn production, this would call D&B Direct+ API.\nCurrently returns a simulated response for demo.","operationId":"duns_lookup_admin_duns_lookup_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"nip","in":"query","required":true,"schema":{"type":"string","description":"Polish NIP (10 digits)","title":"Nip"},"description":"Polish NIP (10 digits)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/onboard-supplier":{"post":{"tags":["backoffice"],"summary":"One-click supplier onboarding from NIP","description":"Sprint E.1 — wpisz NIP, dostań kompletny supplier_profile w 30s.\n\nOrchestrate'uje 4 źródła sygnału w jednym wywołaniu:\n  1. OsintEngine.lookup_nip() — KRS + CEIDG + VIES + risk signals\n  2. whitelist_engine.check_nip() — biała lista MF (VAT czynny?)\n  3. supplier_engine — utworzenie SupplierProfile\n  4. duns_lookup — D&B match (mock)\n\nReturns: gotowy profile + risk breakdown + initial scoring,\nwszystko w jednym JSON żeby UI mógł narysować \"wow\" dashboard.","operationId":"onboard_supplier_admin_onboard_supplier_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"nip","in":"query","required":true,"schema":{"type":"string","description":"Polish NIP (10 digits)","title":"Nip"},"description":"Polish NIP (10 digits)"},{"name":"name_override","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name Override"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/catalog":{"get":{"tags":["backoffice"],"summary":"List catalog items","operationId":"list_catalog_admin_catalog_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}},{"name":"include_inactive","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Inactive"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["backoffice"],"summary":"Create/update catalog item","operationId":"save_catalog_item_admin_catalog_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CatalogItemIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/catalog/{item_id}":{"delete":{"tags":["backoffice"],"summary":"Soft-delete catalog item","operationId":"delete_catalog_item_admin_catalog__item_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"item_id","in":"path","required":true,"schema":{"type":"string","title":"Item Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/catalog/import":{"post":{"tags":["backoffice"],"summary":"Import catalog from CSV (CIF format)","description":"Import catalog items from CSV file in CIF-like format.\nExpected columns: item_id, name, description, price, category,\ndelivery_days, unit, unspsc_code, manufacturer, ean","operationId":"import_catalog_cif_admin_catalog_import_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_import_catalog_cif_admin_catalog_import_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/admin/rules":{"get":{"tags":["backoffice"],"summary":"List business rules","operationId":"list_rules_admin_rules_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"rule_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rule Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["backoffice"],"summary":"Create/update business rule","operationId":"save_rule_admin_rules_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuleIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/rules/{rule_id}":{"delete":{"tags":["backoffice"],"summary":"Deactivate business rule","operationId":"delete_rule_admin_rules__rule_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"rule_id","in":"path","required":true,"schema":{"type":"integer","title":"Rule Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/workflows":{"get":{"tags":["backoffice"],"summary":"List workflow steps","operationId":"list_workflows_admin_workflows_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"workflow_name","in":"query","required":false,"schema":{"type":"string","default":"order_approval","title":"Workflow Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["backoffice"],"summary":"Create/update workflow step","operationId":"save_workflow_step_admin_workflows_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowStepIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/workflows/{step_id}":{"delete":{"tags":["backoffice"],"summary":"Remove workflow step","operationId":"delete_workflow_step_admin_workflows__step_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"step_id","in":"path","required":true,"schema":{"type":"integer","title":"Step Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/users":{"get":{"tags":["backoffice"],"summary":"List users","operationId":"list_users_admin_users_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["backoffice"],"summary":"Create user","operationId":"create_user_admin_users_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserCreateIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/admin/users/{username}/reset-password":{"post":{"tags":["backoffice"],"summary":"Reset another user's password","description":"Tenant-scoped reset: an admin can reset any user inside their own\ntenant. Cross-tenant resets stay super_admin-only via /auth/admin/users/...\nSelf-reset is rejected — admins must use /auth/change-password for their\nown credentials so the old password is verified.","operationId":"admin_reset_user_password_admin_users__username__reset_password_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"username","in":"path","required":true,"schema":{"type":"string","title":"Username"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserResetPasswordIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/dashboard":{"get":{"tags":["backoffice"],"summary":"Admin dashboard KPI","operationId":"admin_dashboard_admin_dashboard_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/portal/profile":{"get":{"tags":["supplier-portal"],"summary":"My supplier profile","operationId":"my_profile_portal_profile_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]},"put":{"tags":["supplier-portal"],"summary":"Update my profile","operationId":"update_my_profile_portal_profile_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileUpdateIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/portal/orders":{"get":{"tags":["supplier-portal"],"summary":"My orders (POs assigned to me)","operationId":"my_orders_portal_orders_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/portal/orders/{order_id}":{"get":{"tags":["supplier-portal"],"summary":"Order detail (my POs only)","operationId":"my_order_detail_portal_orders__order_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string","title":"Order Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/portal/rfq":{"get":{"tags":["supplier-portal"],"summary":"Open RFQs available to me","operationId":"my_rfqs_portal_rfq_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/portal/rfq/{rfq_id}":{"get":{"tags":["supplier-portal"],"summary":"RFQ detail","operationId":"rfq_detail_portal_rfq__rfq_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"rfq_id","in":"path","required":true,"schema":{"type":"string","title":"Rfq Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/portal/rfq/{rfq_id}/bid":{"post":{"tags":["supplier-portal"],"summary":"Submit bid for RFQ","operationId":"submit_bid_portal_rfq__rfq_id__bid_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"rfq_id","in":"path","required":true,"schema":{"type":"string","title":"Rfq Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BidIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/portal/certificates":{"get":{"tags":["supplier-portal"],"summary":"My certificates","operationId":"my_certificates_portal_certificates_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["supplier-portal"],"summary":"Add certificate","operationId":"add_my_certificate_portal_certificates_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CertificateIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/portal/certificates/expiring":{"get":{"tags":["supplier-portal"],"summary":"My expiring certificates","operationId":"my_expiring_certs_portal_certificates_expiring_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":90,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/portal/assessment":{"get":{"tags":["supplier-portal"],"summary":"Assessment questionnaire","operationId":"assessment_questions_portal_assessment_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["supplier-portal"],"summary":"Submit self-assessment","operationId":"submit_my_assessment_portal_assessment_post","requestBody":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/AssessmentAnswerIn"},"type":"array","title":"Answers"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/portal/catalog":{"get":{"tags":["supplier-portal"],"summary":"My published catalog items","operationId":"my_catalog_portal_catalog_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"draft / published / expired","title":"Status"},"description":"draft / published / expired"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["supplier-portal"],"summary":"Publish a new catalog item","operationId":"my_catalog_create_portal_catalog_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SupplierCatalogCreateIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/portal/catalog/{item_id}":{"get":{"tags":["supplier-portal"],"summary":"One of my catalog items","operationId":"my_catalog_get_portal_catalog__item_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"item_id","in":"path","required":true,"schema":{"type":"integer","title":"Item Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["supplier-portal"],"summary":"Update one of my catalog items","operationId":"my_catalog_update_portal_catalog__item_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"item_id","in":"path","required":true,"schema":{"type":"integer","title":"Item Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SupplierCatalogUpdateIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["supplier-portal"],"summary":"Remove one of my catalog items","operationId":"my_catalog_delete_portal_catalog__item_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"item_id","in":"path","required":true,"schema":{"type":"integer","title":"Item Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/portal/catalog/import":{"post":{"tags":["supplier-portal"],"summary":"Import catalog from CSV","operationId":"my_catalog_import_portal_catalog_import_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/portal/dashboard":{"get":{"tags":["supplier-portal"],"summary":"Supplier portal dashboard","operationId":"portal_dashboard_portal_dashboard_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/superadmin/tenants":{"get":{"tags":["superadmin"],"summary":"List all tenants","operationId":"list_tenants_api_v1_superadmin_tenants_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["superadmin"],"summary":"Create new tenant (onboard client)","operationId":"create_tenant_api_v1_superadmin_tenants_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateTenantRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/superadmin/tenants/{tenant_id}":{"get":{"tags":["superadmin"],"summary":"Get tenant details","operationId":"get_tenant_api_v1_superadmin_tenants__tenant_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"tenant_id","in":"path","required":true,"schema":{"type":"string","title":"Tenant Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["superadmin"],"summary":"Update tenant","operationId":"update_tenant_api_v1_superadmin_tenants__tenant_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"tenant_id","in":"path","required":true,"schema":{"type":"string","title":"Tenant Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateTenantRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["superadmin"],"summary":"Disable tenant","operationId":"disable_tenant_api_v1_superadmin_tenants__tenant_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"tenant_id","in":"path","required":true,"schema":{"type":"string","title":"Tenant Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/superadmin/onboard-tenant":{"post":{"tags":["superadmin"],"summary":"Concierge mode — full tenant setup w 30s","description":"Sprint G.7 — sales / consulting playbook automation.\n\nW jednym wywołaniu robi wszystko co normalnie zajmuje 2-tygodniowy\nimplementation project u Coupa/Ariba:\n  1. NIP → KRS+VIES+OSINT (nazwa firmy, adres, PKD)\n  2. Tworzenie tenant z auto-fill z OSINT (name, contact_email)\n  3. Admin user + 4 default user role (manager, buyer, warehouse,\n     approver) z deterministic seeded password\n  4. Initial supplier seed (jeśli flag ustawiony) — 5 demo\n     dostawców per branża (automotive: Bosch/TRW/Brembo/MANN/Castrol;\n     retail: Allegro/3M/Steelcase/Logitech/HP)\n  5. Default approval policy + DECLARE rules\n\nKonkurencja Coupa/Ariba: 6-12 mies wdrożenie. My: 30s + URL.\n\nReturns: tenant_id, login URL, all role credentials, summary.","operationId":"onboard_tenant_api_v1_superadmin_onboard_tenant_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OnboardTenantRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/superadmin/tenants/{tenant_id}/users":{"get":{"tags":["superadmin"],"summary":"List users for a tenant","operationId":"list_tenant_users_api_v1_superadmin_tenants__tenant_id__users_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"tenant_id","in":"path","required":true,"schema":{"type":"string","title":"Tenant Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/superadmin/stats":{"get":{"tags":["superadmin"],"summary":"Platform-wide statistics","operationId":"platform_stats_api_v1_superadmin_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/superadmin/jwt-secret/generate":{"post":{"tags":["superadmin"],"summary":"Generate a fresh JWT secret (super_admin)","description":"Generate a 64-char hex secret for the operator to set in the\nRailway env (FLOW_JWT_SECRET) and trigger a container restart.\n\nThis is intentionally NOT an automated rotation — running multiple\nsecrets in a grace window would need a DB-backed secret store + a\nrefresh cache layer + cross-worker coordination, which is not\nproportional to the value here. The button gives ops a clean way to\nmint a strong key without dropping into a shell, and the operator\nkeeps full control over when to apply it.\n\nSide effects: NONE on the server. The current FLOW_JWT_SECRET is\nuntouched. Existing JWTs keep validating until the operator\nactually swaps the env var and restarts the container.","operationId":"generate_jwt_secret_api_v1_superadmin_jwt_secret_generate_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/health":{"get":{"tags":["system"],"summary":"Health","description":"Liveness probe — just proves the process is up.","operationId":"health_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/metrics":{"get":{"tags":["system"],"summary":"Metrics Endpoint","description":"Rolling in-process metrics: request counts, error counts, p50/p95/p99\nlatency per (method, route). Useful for ops dashboards without standing\nup Prometheus + Grafana. Reset on every process restart.","operationId":"metrics_endpoint_metrics_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/health/llm":{"get":{"tags":["system"],"summary":"Llm Synthetic Health","description":"Synthetic LLM health — separate endpoint for ops dashboards.\nForces a fresh ping (bypasses cache). Don't poll this from a\nhigh-frequency probe; use /health/ready instead.","operationId":"llm_synthetic_health_health_llm_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/health/ready":{"get":{"tags":["system"],"summary":"Readiness","description":"Readiness probe — checks every subsystem the app actually depends on.\n\nReturns 200 with a per-subsystem verdict so Railway (or any LB) can\nkeep routing even when optional pieces are degraded. Each check is\nisolated so one slow check can't cascade.","operationId":"readiness_health_ready_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}}},"components":{"schemas":{"ActivityBottleneck":{"properties":{"activity":{"type":"string","title":"Activity"},"total_wait_hours":{"type":"number","title":"Total Wait Hours"},"incoming_transitions":{"type":"integer","title":"Incoming Transitions"}},"type":"object","required":["activity","total_wait_hours","incoming_transitions"],"title":"ActivityBottleneck"},"AdminResetPasswordRequest":{"properties":{"new_password":{"type":"string","minLength":6,"title":"New Password"}},"type":"object","required":["new_password"],"title":"AdminResetPasswordRequest"},"AlertSchema":{"properties":{"id":{"type":"string","title":"Id"},"severity":{"type":"string","title":"Severity"},"category":{"type":"string","title":"Category"},"title":{"type":"string","title":"Title"},"description":{"type":"string","title":"Description"},"metric_value":{"type":"number","title":"Metric Value","default":0.0},"threshold":{"type":"number","title":"Threshold","default":0.0},"entity_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Entity Id"},"timestamp":{"type":"string","title":"Timestamp"}},"type":"object","required":["id","severity","category","title","description","timestamp"],"title":"AlertSchema","description":"Single alert."},"AlertSummary":{"properties":{"total":{"type":"integer","title":"Total"},"critical":{"type":"integer","title":"Critical"},"warning":{"type":"integer","title":"Warning"},"info":{"type":"integer","title":"Info"}},"type":"object","required":["total","critical","warning","info"],"title":"AlertSummary","description":"Alert counts by severity."},"AlertThresholds":{"properties":{"budget_warning_pct":{"type":"number","maximum":100.0,"minimum":0.0,"title":"Budget Warning Pct","default":95.0},"max_supplier_share_warn":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Max Supplier Share Warn","default":0.8},"cost_component_warn":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Cost Component Warn","default":0.7},"sla_target_hours":{"type":"number","exclusiveMinimum":0.0,"title":"Sla Target Hours","default":120.0},"conformance_warn":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Conformance Warn","default":0.5},"bottleneck_p95_hours":{"type":"number","exclusiveMinimum":0.0,"title":"Bottleneck P95 Hours","default":48.0},"rework_rate_warn":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Rework Rate Warn","default":0.3},"anomaly_z_threshold":{"type":"number","exclusiveMinimum":0.0,"title":"Anomaly Z Threshold","default":2.0}},"type":"object","title":"AlertThresholds","description":"Configurable alert thresholds."},"AlertsResponse":{"properties":{"alerts":{"items":{"$ref":"#/components/schemas/AlertSchema"},"type":"array","title":"Alerts"},"summary":{"$ref":"#/components/schemas/AlertSummary"}},"type":"object","required":["alerts","summary"],"title":"AlertsResponse","description":"Response from alerts engine."},"AllocationRow":{"properties":{"supplier_id":{"type":"string","title":"Supplier Id"},"supplier_name":{"type":"string","title":"Supplier Name"},"product_id":{"type":"string","title":"Product Id"},"allocated_qty":{"type":"number","title":"Allocated Qty","description":"Units allocated"},"allocated_fraction":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Allocated Fraction","description":"Fraction of total product demand"},"unit_cost":{"type":"number","title":"Unit Cost"},"logistics_cost":{"type":"number","title":"Logistics Cost"},"lead_time_days":{"type":"number","title":"Lead Time Days"},"compliance_score":{"type":"number","title":"Compliance Score"},"esg_score":{"type":"number","title":"Esg Score"}},"type":"object","required":["supplier_id","supplier_name","product_id","allocated_qty","allocated_fraction","unit_cost","logistics_cost","lead_time_days","compliance_score","esg_score"],"title":"AllocationRow","description":"Resulting allocation for one (supplier, product) pair."},"AnomalyCase":{"properties":{"case_id":{"type":"string","title":"Case Id"},"duration_hours":{"type":"number","title":"Duration Hours"},"z_score":{"type":"number","title":"Z Score"},"deviation_hours":{"type":"number","title":"Deviation Hours"},"trace":{"type":"string","title":"Trace","default":""},"num_events":{"type":"integer","title":"Num Events","default":0}},"type":"object","required":["case_id","duration_hours","z_score","deviation_hours"],"title":"AnomalyCase","description":"Statistical anomaly case."},"AnomalyRequest":{"properties":{"events":{"items":{"additionalProperties":true,"type":"object"},"type":"array","minItems":2,"title":"Events"},"z_threshold":{"type":"number","maximum":5.0,"minimum":1.0,"title":"Z Threshold","description":"Z-score threshold for anomaly detection (default: 2.0).","default":2.0}},"type":"object","required":["events"],"title":"AnomalyRequest","description":"Request for statistical anomaly detection."},"AnomalyResponse":{"properties":{"mean_hours":{"type":"number","title":"Mean Hours"},"std_hours":{"type":"number","title":"Std Hours"},"threshold_hours":{"type":"number","title":"Threshold Hours"},"z_threshold":{"type":"number","title":"Z Threshold","default":2.0},"anomalies":{"items":{"$ref":"#/components/schemas/AnomalyCase"},"type":"array","title":"Anomalies"},"anomaly_rate":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Anomaly Rate"},"total_cases":{"type":"integer","title":"Total Cases"}},"type":"object","required":["mean_hours","std_hours","threshold_hours","anomalies","anomaly_rate","total_cases"],"title":"AnomalyResponse","description":"Anomaly detection results."},"AssessmentAnswerIn":{"properties":{"question_id":{"type":"string","title":"Question Id"},"answer":{"type":"string","title":"Answer"},"score":{"type":"number","title":"Score"}},"type":"object","required":["question_id","answer","score"],"title":"AssessmentAnswerIn"},"AuctionCreate":{"properties":{"title":{"type":"string","title":"Title"},"description":{"type":"string","title":"Description","default":""},"auction_type":{"$ref":"#/components/schemas/AuctionType","default":"reverse"},"domain":{"type":"string","title":"Domain","default":"parts"},"line_items":{"items":{"$ref":"#/components/schemas/AuctionLineItem"},"type":"array","title":"Line Items","default":[]},"invited_suppliers":{"items":{"type":"string"},"type":"array","title":"Invited Suppliers","default":[]},"start_time":{"type":"string","title":"Start Time","default":""},"end_time":{"type":"string","title":"End Time","default":""},"auto_extend_minutes":{"type":"integer","title":"Auto Extend Minutes","default":5},"min_decrement_pct":{"type":"number","title":"Min Decrement Pct","default":2.0},"reserve_price":{"type":"number","title":"Reserve Price","default":0.0},"currency":{"type":"string","title":"Currency","default":"PLN"},"max_rounds":{"type":"integer","title":"Max Rounds","default":1}},"type":"object","required":["title"],"title":"AuctionCreate"},"AuctionLineItem":{"properties":{"line_id":{"type":"string","title":"Line Id","default":""},"product_name":{"type":"string","title":"Product Name"},"unspsc_code":{"type":"string","title":"Unspsc Code","default":""},"quantity":{"type":"number","title":"Quantity","default":1.0},"unit":{"type":"string","title":"Unit","default":"szt"},"max_unit_price":{"type":"number","title":"Max Unit Price","default":0.0},"description":{"type":"string","title":"Description","default":""}},"type":"object","required":["product_name"],"title":"AuctionLineItem"},"AuctionType":{"type":"string","enum":["reverse","english_reverse","sealed_bid"],"title":"AuctionType"},"BidIn":{"properties":{"unit_price":{"type":"number","title":"Unit Price"},"lead_time_days":{"type":"integer","title":"Lead Time Days"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"valid_until":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Valid Until"}},"type":"object","required":["unit_price","lead_time_days"],"title":"BidIn"},"BidSubmit":{"properties":{"line_id":{"type":"string","title":"Line Id","default":""},"unit_price":{"type":"number","title":"Unit Price"},"lead_time_days":{"type":"integer","title":"Lead Time Days","default":14},"notes":{"type":"string","title":"Notes","default":""}},"type":"object","required":["unit_price"],"title":"BidSubmit"},"Body_api_copilot_document_extract_file_api_v1_copilot_document_extract_file_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_api_copilot_document_extract_file_api_v1_copilot_document_extract_file_post"},"Body_conformance_upload_bpmn_api_v1_process_mining_conformance_upload_bpmn_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"},"name":{"type":"string","title":"Name","default":""}},"type":"object","required":["file"],"title":"Body_conformance_upload_bpmn_api_v1_process_mining_conformance_upload_bpmn_post"},"Body_import_catalog_cif_admin_catalog_import_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_import_catalog_cif_admin_catalog_import_post"},"Body_upload_cif_api_v1_cif_upload_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_upload_cif_api_v1_cif_upload_post"},"Body_upload_demand_api_v1_db_demand_upload_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_upload_demand_api_v1_db_demand_upload_post"},"Body_upload_p2p_events_api_v1_db_p2p_events_upload_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_upload_p2p_events_api_v1_db_p2p_events_upload_post"},"Body_upload_suppliers_api_v1_db_suppliers_upload_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_upload_suppliers_api_v1_db_suppliers_upload_post"},"BottleneckResponse":{"properties":{"bottleneck_transitions":{"items":{"$ref":"#/components/schemas/BottleneckTransition"},"type":"array","title":"Bottleneck Transitions"},"activity_bottlenecks":{"items":{"$ref":"#/components/schemas/ActivityBottleneck"},"type":"array","title":"Activity Bottlenecks"},"slowest_cases":{"items":{"$ref":"#/components/schemas/SlowCase"},"type":"array","title":"Slowest Cases"},"summary":{"$ref":"#/components/schemas/BottleneckSummary"}},"type":"object","required":["bottleneck_transitions","activity_bottlenecks","slowest_cases","summary"],"title":"BottleneckResponse","description":"Bottleneck analysis results for BI."},"BottleneckSummary":{"properties":{"total_transitions_analyzed":{"type":"integer","title":"Total Transitions Analyzed"},"total_activities":{"type":"integer","title":"Total Activities"},"total_cases":{"type":"integer","title":"Total Cases"},"avg_case_duration_hours":{"type":"number","title":"Avg Case Duration Hours"}},"type":"object","required":["total_transitions_analyzed","total_activities","total_cases","avg_case_duration_hours"],"title":"BottleneckSummary"},"BottleneckTransition":{"properties":{"source":{"type":"string","title":"Source"},"target":{"type":"string","title":"Target"},"count":{"type":"integer","title":"Count"},"avg_hours":{"type":"number","title":"Avg Hours"},"median_hours":{"type":"number","title":"Median Hours"},"p95_hours":{"type":"number","title":"P95 Hours"},"min_hours":{"type":"number","title":"Min Hours"},"max_hours":{"type":"number","title":"Max Hours"}},"type":"object","required":["source","target","count","avg_hours","median_hours","p95_hours","min_hours","max_hours"],"title":"BottleneckTransition"},"CartItemIn":{"properties":{"id":{"type":"string","title":"Id"},"quantity":{"type":"integer","title":"Quantity","default":1}},"type":"object","required":["id"],"title":"CartItemIn"},"CartRequest":{"properties":{"items":{"items":{"$ref":"#/components/schemas/CartItemIn"},"type":"array","title":"Items"}},"type":"object","required":["items"],"title":"CartRequest"},"CaseDurationStats":{"properties":{"total_cases":{"type":"integer","title":"Total Cases","default":0},"avg_hours":{"type":"number","title":"Avg Hours","default":0.0},"median_hours":{"type":"number","title":"Median Hours","default":0.0},"min_hours":{"type":"number","title":"Min Hours","default":0.0},"max_hours":{"type":"number","title":"Max Hours","default":0.0}},"type":"object","title":"CaseDurationStats"},"CatalogItemIn":{"properties":{"item_id":{"type":"string","title":"Item Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"price":{"type":"number","title":"Price"},"category":{"type":"string","title":"Category","default":"parts"},"delivery_days":{"type":"integer","title":"Delivery Days","default":3},"weight_kg":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Weight Kg"},"unit":{"type":"string","title":"Unit","default":"szt"},"requires_approval":{"type":"boolean","title":"Requires Approval","default":false},"unspsc_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Unspsc Code"},"unspsc_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Unspsc Name"},"manufacturer":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Manufacturer"},"ean":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ean"}},"type":"object","required":["item_id","name","price"],"title":"CatalogItemIn"},"CertificateIn":{"properties":{"name":{"type":"string","title":"Name"},"issuer":{"type":"string","title":"Issuer"},"valid_until":{"type":"string","title":"Valid Until"},"cert_type":{"type":"string","title":"Cert Type","default":"iso"}},"type":"object","required":["name","issuer","valid_until"],"title":"CertificateIn"},"CertificationType":{"type":"string","enum":["iso_9001","iso_14001","iatf_16949","iso_45001","iso_50001","emas","other"],"title":"CertificationType"},"ChainRequest":{"properties":{"suppliers":{"items":{"$ref":"#/components/schemas/SupplierInput"},"type":"array","minItems":1,"title":"Suppliers"},"demand":{"items":{"$ref":"#/components/schemas/DemandItem"},"type":"array","minItems":1,"title":"Demand"},"base":{"anyOf":[{"$ref":"#/components/schemas/ChainStep"},{"type":"null"}]},"steps":{"items":{"$ref":"#/components/schemas/ChainStep"},"type":"array","maxItems":10,"minItems":1,"title":"Steps"},"impact_assumptions":{"anyOf":[{"$ref":"#/components/schemas/ImpactAssumptions"},{"type":"null"}],"description":"Enable Process Twin impact projections. Pass {} for defaults, null to skip."}},"type":"object","required":["suppliers","demand","steps"],"title":"ChainRequest"},"ChainStep":{"properties":{"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"},"lambda_param":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lambda Param"},"w_cost":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"W Cost"},"w_time":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"W Time"},"w_compliance":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"W Compliance"},"w_esg":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"W Esg"},"mode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mode"},"max_vendor_share":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Max Vendor Share"},"sla_floor":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Sla Floor"},"total_budget":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Total Budget"},"max_products_per_supplier":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Products Per Supplier"}},"type":"object","title":"ChainStep","description":"One incremental delta applied on top of the accumulated state."},"ChangePasswordRequest":{"properties":{"old_password":{"type":"string","title":"Old Password"},"new_password":{"type":"string","title":"New Password"}},"type":"object","required":["old_password","new_password"],"title":"ChangePasswordRequest"},"ChangepointRequest":{"properties":{"events":{"items":{"additionalProperties":true,"type":"object"},"type":"array","minItems":1,"title":"Events"},"delta":{"type":"number","exclusiveMaximum":1.0,"exclusiveMinimum":0.0,"title":"Delta","default":0.05},"min_periods":{"type":"integer","maximum":20.0,"minimum":2.0,"title":"Min Periods","default":4}},"type":"object","required":["events"],"title":"ChangepointRequest"},"CheckRequest":{"properties":{"events":{"items":{"additionalProperties":true,"type":"object"},"type":"array","minItems":1,"title":"Events","description":"P2P event log"},"rules":{"anyOf":[{"items":{"$ref":"#/components/schemas/ComplianceRule"},"type":"array"},{"type":"null"}],"title":"Rules","description":"Override the default rulebook. Null = use defaults."}},"type":"object","required":["events"],"title":"CheckRequest"},"CheckoutRequest":{"properties":{"items":{"items":{"$ref":"#/components/schemas/CartItemIn"},"type":"array","title":"Items"},"mpk":{"type":"string","title":"Mpk","default":"IT-100"},"gl_account":{"type":"string","title":"Gl Account","default":"400-Auto-Parts"},"destination_region":{"type":"string","title":"Destination Region","default":"PL-MA"}},"type":"object","required":["items"],"title":"CheckoutRequest"},"CommentBody":{"properties":{"body":{"type":"string","title":"Body"}},"type":"object","required":["body"],"title":"CommentBody"},"CommentRequest":{"properties":{"actor":{"type":"string","title":"Actor","default":"buyer@flowproc.eu"},"comment":{"type":"string","title":"Comment"}},"type":"object","required":["comment"],"title":"CommentRequest"},"ComparisonRow":{"properties":{"metric":{"type":"string","title":"Metric"},"values":{"additionalProperties":{"type":"number"},"type":"object","title":"Values"},"best":{"type":"string","title":"Best"}},"type":"object","required":["metric","values","best"],"title":"ComparisonRow","description":"One row of the comparison matrix."},"ComplianceRule":{"properties":{"id":{"type":"string","title":"Id","description":"Stable identifier for the rule"},"type":{"type":"string","enum":["existence","absence","response","precedence"],"title":"Type"},"activity_a":{"type":"string","title":"Activity A","description":"Primary activity (the antecedent)"},"activity_b":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Activity B","description":"Secondary activity — required for response/precedence"},"description":{"type":"string","title":"Description","description":"Human-readable explanation","default":""},"severity":{"type":"string","enum":["low","medium","high","critical"],"title":"Severity","default":"high"}},"type":"object","required":["id","type","activity_a"],"title":"ComplianceRule","description":"Single declarative rule over a P2P event log."},"ConformanceCaseResult":{"properties":{"case_id":{"type":"string","title":"Case Id"},"fitness":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Fitness","description":"Fraction of reference activities present"},"is_conforming":{"type":"boolean","title":"Is Conforming"},"activities_present":{"type":"integer","title":"Activities Present"},"activities_missing":{"items":{"type":"string"},"type":"array","title":"Activities Missing"},"activities_extra":{"items":{"type":"string"},"type":"array","title":"Activities Extra"},"order_correct":{"type":"boolean","title":"Order Correct"},"trace":{"type":"string","title":"Trace"}},"type":"object","required":["case_id","fitness","is_conforming","activities_present","activities_missing","activities_extra","order_correct","trace"],"title":"ConformanceCaseResult","description":"Per-case conformance check result."},"ConformanceRequest":{"properties":{"events":{"items":{"additionalProperties":true,"type":"object"},"type":"array","minItems":2,"title":"Events"},"reference_path":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Reference Path","description":"Custom reference path. If omitted, uses Flow Procurement standard P2P."},"top_n":{"type":"integer","maximum":50.0,"minimum":1.0,"title":"Top N","default":5}},"type":"object","required":["events"],"title":"ConformanceRequest","description":"Request for conformance checking with optional custom reference path."},"ConformanceResponse":{"properties":{"reference_path":{"type":"string","title":"Reference Path"},"total_cases":{"type":"integer","title":"Total Cases"},"conforming_cases":{"type":"integer","title":"Conforming Cases"},"conformance_rate":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Conformance Rate"},"avg_fitness":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Avg Fitness"},"cases":{"items":{"$ref":"#/components/schemas/ConformanceCaseResult"},"type":"array","title":"Cases"}},"type":"object","required":["reference_path","total_cases","conforming_cases","conformance_rate","avg_fitness","cases"],"title":"ConformanceResponse","description":"Conformance checking — discovered process vs reference path."},"ConstraintConfig":{"properties":{"min_supplier_count":{"anyOf":[{"type":"integer","minimum":2.0},{"type":"null"}],"title":"Min Supplier Count","description":"C10: minimum number of active suppliers in solution"},"min_geographic_regions":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Min Geographic Regions","description":"C11: minimum distinct supplier regions required"},"min_esg_score":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Min Esg Score","description":"C12: minimum weighted-average ESG score across portfolio"},"max_payment_terms_days":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Max Payment Terms Days","description":"C13: max weighted-average payment terms (days)"},"preferred_supplier_bonus":{"type":"number","maximum":0.5,"minimum":0.0,"title":"Preferred Supplier Bonus","description":"C15a: soft objective reduction factor for preferred suppliers","default":0.05},"min_preferred_share":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Min Preferred Share","description":"C15b: hard lower bound — min fraction of portfolio volume allocated to preferred suppliers"}},"type":"object","title":"ConstraintConfig","description":"C10–C15: optional advanced constraints for solver."},"ConstraintLog":{"properties":{"name":{"type":"string","title":"Name"},"expression":{"type":"string","title":"Expression"},"bound":{"type":"string","title":"Bound"},"slack":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Slack"}},"type":"object","required":["name","expression","bound"],"title":"ConstraintLog"},"ContactPerson":{"properties":{"contact_id":{"type":"string","title":"Contact Id","default":""},"name":{"type":"string","title":"Name"},"role":{"$ref":"#/components/schemas/ContactRole","default":"sales"},"email":{"type":"string","title":"Email","default":""},"phone":{"type":"string","title":"Phone","default":""},"is_primary":{"type":"boolean","title":"Is Primary","default":false}},"type":"object","required":["name"],"title":"ContactPerson"},"ContactRole":{"type":"string","enum":["sales","key_account","quality","logistics","management","other"],"title":"ContactRole"},"ContractPayload":{"properties":{"id":{"type":"string","title":"Id"},"supplier_id":{"type":"string","title":"Supplier Id"},"supplier_name":{"type":"string","title":"Supplier Name"},"category":{"type":"string","title":"Category"},"start_date":{"type":"string","title":"Start Date"},"end_date":{"type":"string","title":"End Date"},"committed_volume_pln":{"type":"number","title":"Committed Volume Pln","default":0},"price_lock":{"type":"boolean","title":"Price Lock","default":false},"status":{"type":"string","title":"Status","default":"active"},"notes":{"type":"string","title":"Notes","default":""}},"type":"object","required":["id","supplier_id","supplier_name","category","start_date","end_date"],"title":"ContractPayload"},"CopilotMessage":{"properties":{"role":{"type":"string","title":"Role","default":"user"},"content":{"type":"string","title":"Content"},"timestamp":{"type":"string","title":"Timestamp","default":""},"context":{"additionalProperties":true,"type":"object","title":"Context","default":{}}},"type":"object","required":["content"],"title":"CopilotMessage"},"CopilotRequest":{"properties":{"message":{"type":"string","title":"Message"},"context":{"additionalProperties":true,"type":"object","title":"Context","default":{}},"history":{"items":{"$ref":"#/components/schemas/CopilotMessage"},"type":"array","title":"History","default":[]},"lang":{"type":"string","title":"Lang","default":"pl"}},"type":"object","required":["message"],"title":"CopilotRequest"},"CreateProjectRequest":{"properties":{"title":{"type":"string","title":"Title","default":""},"items":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Items","default":[]},"domain":{"type":"string","title":"Domain","default":"parts"},"unspsc_code":{"type":"string","title":"Unspsc Code","default":""},"mpk":{"type":"string","title":"Mpk","default":""},"gl_account":{"type":"string","title":"Gl Account","default":""},"budget_limit":{"type":"number","title":"Budget Limit","default":0.0},"is_professional":{"type":"boolean","title":"Is Professional","default":true},"requester":{"type":"string","title":"Requester","default":"buyer@flowproc.eu"},"requester_name":{"type":"string","title":"Requester Name","default":""},"department":{"type":"string","title":"Department","default":""},"description":{"type":"string","title":"Description","default":""}},"type":"object","title":"CreateProjectRequest"},"CreateTenantRequest":{"properties":{"tenant_id":{"type":"string","title":"Tenant Id"},"name":{"type":"string","title":"Name"},"plan":{"type":"string","title":"Plan","default":"starter"},"max_users":{"type":"integer","title":"Max Users","default":10},"max_catalog_items":{"type":"integer","title":"Max Catalog Items","default":500},"contact_email":{"type":"string","title":"Contact Email","default":""},"admin_username":{"type":"string","title":"Admin Username","default":""},"admin_password":{"type":"string","title":"Admin Password","default":""},"admin_email":{"type":"string","title":"Admin Email","default":""}},"type":"object","required":["tenant_id","name"],"title":"CreateTenantRequest"},"CriteriaWeights":{"properties":{"lambda_param":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Lambda Param","description":"Cost ↔ time trade-off coefficient (1 = pure cost, 0 = pure time)","default":0.5},"w_cost":{"type":"number","maximum":1.0,"minimum":0.0,"title":"W Cost","default":0.4},"w_time":{"type":"number","maximum":1.0,"minimum":0.0,"title":"W Time","default":0.3},"w_compliance":{"type":"number","maximum":1.0,"minimum":0.0,"title":"W Compliance","default":0.15},"w_esg":{"type":"number","maximum":1.0,"minimum":0.0,"title":"W Esg","default":0.15}},"type":"object","title":"CriteriaWeights","description":"Weights for normalised criteria.\n\nThe `lambda_param` controls the cost ↔ time trade-off:\n    effective_cost_weight  = lambda_param * w_cost\n    effective_time_weight  = (1 - lambda_param) * w_time\n\nCompliance and ESG weights are applied directly.\nAll four base weights (w_cost, w_time, w_compliance, w_esg) should sum to 1."},"DFGEdge":{"properties":{"source":{"type":"string","title":"Source"},"target":{"type":"string","title":"Target"},"frequency":{"type":"integer","title":"Frequency"}},"type":"object","required":["source","target","frequency"],"title":"DFGEdge"},"DFGResponse":{"properties":{"nodes":{"items":{"type":"string"},"type":"array","title":"Nodes"},"edges":{"items":{"$ref":"#/components/schemas/DFGEdge"},"type":"array","title":"Edges"},"start_activities":{"additionalProperties":{"type":"integer"},"type":"object","title":"Start Activities"},"end_activities":{"additionalProperties":{"type":"integer"},"type":"object","title":"End Activities"},"total_cases":{"type":"integer","title":"Total Cases"},"total_events":{"type":"integer","title":"Total Events"}},"type":"object","required":["nodes","edges","start_activities","end_activities","total_cases","total_events"],"title":"DFGResponse","description":"Directly-Follows Graph for BI visualisation."},"DashboardRequest":{"properties":{"suppliers":{"items":{"$ref":"#/components/schemas/SupplierInput"},"type":"array","title":"Suppliers"},"demand":{"items":{"$ref":"#/components/schemas/DemandItem"},"type":"array","title":"Demand"},"weights":{"$ref":"#/components/schemas/CriteriaWeights"},"mode":{"$ref":"#/components/schemas/SolverMode","default":"continuous"},"pareto_steps":{"type":"integer","maximum":101.0,"minimum":2.0,"title":"Pareto Steps","description":"Number of lambda values to sample for the Pareto front (incl. 0 and 1)","default":11},"max_vendor_share":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Max Vendor Share","default":0.6}},"type":"object","required":["suppliers","demand"],"title":"DashboardRequest","description":"Request for the dashboard / Pareto-front endpoint."},"DashboardResponse":{"properties":{"pareto_front":{"items":{"$ref":"#/components/schemas/ParetoPoint"},"type":"array","title":"Pareto Front"},"supplier_profiles":{"items":{"$ref":"#/components/schemas/SupplierRadarProfile"},"type":"array","title":"Supplier Profiles"},"current_allocation":{"$ref":"#/components/schemas/OptimizationResponse"}},"type":"object","required":["pareto_front","supplier_profiles","current_allocation"],"title":"DashboardResponse","description":"Response from the dashboard endpoint."},"DemandItem":{"properties":{"product_id":{"type":"string","title":"Product Id","examples":["IDX-10042"]},"demand_qty":{"type":"number","exclusiveMinimum":0.0,"title":"Demand Qty","description":"Required quantity (units / hours)"},"destination_region":{"type":"string","title":"Destination Region","description":"Region code where the product must be delivered","examples":["PL-MA"]}},"type":"object","required":["product_id","demand_qty","destination_region"],"title":"DemandItem","description":"Single product/index demand from the EWM system."},"DemoDomain":{"type":"string","enum":["parts","oe_components","oils","batteries","tires","bodywork","it_services","logistics","packaging","facility_management","mro"],"title":"DemoDomain"},"DiggingRequest":{"properties":{"events":{"items":{"additionalProperties":true,"type":"object"},"type":"array","minItems":2,"title":"Events"},"top_n":{"type":"integer","maximum":50.0,"minimum":1.0,"title":"Top N","default":5},"reference_path":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Reference Path"}},"type":"object","required":["events"],"title":"DiggingRequest","description":"Request for full process digging report."},"DocumentExtractRequest":{"properties":{"text":{"type":"string","title":"Text","description":"Raw pasted text — email body, document excerpt, item list"}},"type":"object","required":["text"],"title":"DocumentExtractRequest"},"DomainTrendPoint":{"properties":{"domain":{"type":"string","title":"Domain"},"label":{"type":"string","title":"Label"},"objective_total":{"type":"number","title":"Objective Total"},"cost_component":{"type":"number","title":"Cost Component"},"time_component":{"type":"number","title":"Time Component"},"compliance_component":{"type":"number","title":"Compliance Component"},"esg_component":{"type":"number","title":"Esg Component"},"total_cost_pln":{"type":"number","title":"Total Cost Pln"},"suppliers_used":{"type":"integer","title":"Suppliers Used"}},"type":"object","required":["domain","label","objective_total","cost_component","time_component","compliance_component","esg_component","total_cost_pln","suppliers_used"],"title":"DomainTrendPoint"},"DomainTrendResponse":{"properties":{"points":{"items":{"$ref":"#/components/schemas/DomainTrendPoint"},"type":"array","title":"Points"},"total_domains":{"type":"integer","title":"Total Domains"}},"type":"object","required":["points","total_domains"],"title":"DomainTrendResponse"},"DonutResponse":{"properties":{"segments":{"items":{"$ref":"#/components/schemas/DonutSegment"},"type":"array","title":"Segments"},"total_cost_pln":{"type":"number","title":"Total Cost Pln"}},"type":"object","required":["segments","total_cost_pln"],"title":"DonutResponse"},"DonutSegment":{"properties":{"supplier_id":{"type":"string","title":"Supplier Id"},"supplier_name":{"type":"string","title":"Supplier Name"},"total_cost_pln":{"type":"number","title":"Total Cost Pln"},"fraction":{"type":"number","title":"Fraction"}},"type":"object","required":["supplier_id","supplier_name","total_cost_pln","fraction"],"title":"DonutSegment"},"DriftRequest":{"properties":{"events_a":{"items":{"additionalProperties":true,"type":"object"},"type":"array","minItems":0,"title":"Events A","description":"Earlier window events"},"events_b":{"items":{"additionalProperties":true,"type":"object"},"type":"array","minItems":0,"title":"Events B","description":"Later window events"}},"type":"object","required":["events_a","events_b"],"title":"DriftRequest","description":"Two explicit event windows for drift analysis."},"DriftResponse":{"properties":{"js_divergence":{"type":"number","minimum":0.0,"title":"Js Divergence","description":"Jensen-Shannon divergence, 0 = no drift"},"severity":{"type":"string","title":"Severity","description":"low | medium | high"},"total_variants_a":{"type":"integer","title":"Total Variants A"},"total_variants_b":{"type":"integer","title":"Total Variants B"},"cases_a":{"type":"integer","title":"Cases A"},"cases_b":{"type":"integer","title":"Cases B"},"new_variants_in_b":{"items":{"type":"string"},"type":"array","title":"New Variants In B"},"disappeared_variants":{"items":{"type":"string"},"type":"array","title":"Disappeared Variants"},"top_shifted_variants":{"items":{"$ref":"#/components/schemas/ShiftedVariant"},"type":"array","title":"Top Shifted Variants"},"note":{"type":"string","title":"Note","default":""}},"type":"object","required":["js_divergence","severity","total_variants_a","total_variants_b","cases_a","cases_b","new_variants_in_b","disappeared_variants","top_shifted_variants"],"title":"DriftResponse","description":"Process-level drift between two event windows."},"EventLogEntry":{"properties":{"case_id":{"type":"string","title":"Case Id","description":"Process instance ID (e.g., 'REQ-001')"},"activity":{"type":"string","title":"Activity","description":"Activity name (e.g., 'Utworzenie Zapotrzebowania')"},"timestamp":{"type":"string","title":"Timestamp","description":"ISO datetime (e.g., '2026-03-01T10:00:00')"},"resource":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Resource","description":"User/system who executed the activity"},"cost":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Cost","description":"Cost associated with this event"}},"type":"object","required":["case_id","activity","timestamp"],"title":"EventLogEntry","description":"Single event in a P2P process log."},"FullProcessDiggingReport":{"properties":{"dfg_frequency":{"$ref":"#/components/schemas/DFGResponse"},"dfg_performance":{"$ref":"#/components/schemas/PerformanceDFGResponse"},"lead_times":{"$ref":"#/components/schemas/LeadTimeResponse"},"bottlenecks":{"$ref":"#/components/schemas/BottleneckResponse"},"variants":{"$ref":"#/components/schemas/VariantResponse"},"conformance":{"$ref":"#/components/schemas/ConformanceResponse"},"handovers":{"$ref":"#/components/schemas/HandoverResponse"},"rework":{"$ref":"#/components/schemas/ReworkResponse"},"sla_monitor":{"$ref":"#/components/schemas/SLAMonitorResponse"},"anomalies":{"$ref":"#/components/schemas/AnomalyResponse"}},"type":"object","required":["dfg_frequency","dfg_performance","lead_times","bottlenecks","variants","conformance","handovers","rework","sla_monitor","anomalies"],"title":"FullProcessDiggingReport","description":"Aggregated process digging report — all analyses in one call."},"GoodsReceiptItem":{"properties":{"product_id":{"type":"string","title":"Product Id"},"qty":{"type":"integer","title":"Qty"}},"type":"object","required":["product_id","qty"],"title":"GoodsReceiptItem"},"GoodsReceiptRequest":{"properties":{"order_id":{"type":"string","title":"Order Id"},"items":{"items":{"$ref":"#/components/schemas/GoodsReceiptItem"},"type":"array","title":"Items"}},"type":"object","required":["order_id","items"],"title":"GoodsReceiptRequest"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"HandoverEdge":{"properties":{"from_resource":{"type":"string","title":"From Resource"},"to_resource":{"type":"string","title":"To Resource"},"handover_count":{"type":"integer","title":"Handover Count"}},"type":"object","required":["from_resource","to_resource","handover_count"],"title":"HandoverEdge","description":"Edge in the resource handover graph."},"HandoverNode":{"properties":{"resource":{"type":"string","title":"Resource"},"activities":{"items":{"type":"string"},"type":"array","title":"Activities"},"cases_involved":{"type":"integer","title":"Cases Involved"}},"type":"object","required":["resource","activities","cases_involved"],"title":"HandoverNode","description":"Resource node in the social network."},"HandoverResponse":{"properties":{"available":{"type":"boolean","title":"Available"},"message":{"type":"string","title":"Message","default":""},"nodes":{"items":{"$ref":"#/components/schemas/HandoverNode"},"type":"array","title":"Nodes","default":[]},"edges":{"items":{"$ref":"#/components/schemas/HandoverEdge"},"type":"array","title":"Edges","default":[]},"total_handovers":{"type":"integer","title":"Total Handovers","default":0},"unique_resources":{"type":"integer","title":"Unique Resources","default":0}},"type":"object","required":["available"],"title":"HandoverResponse","description":"Resource handover / social network analysis."},"ImpactAssumptions":{"properties":{"annual_spend_multiplier":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"null"}],"title":"Annual Spend Multiplier"},"avg_lead_days":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Avg Lead Days"},"otif_baseline_pct":{"anyOf":[{"type":"number","maximum":100.0,"minimum":0.0},{"type":"null"}],"title":"Otif Baseline Pct"}},"type":"object","title":"ImpactAssumptions"},"IntakeRequest":{"properties":{"message":{"type":"string","title":"Message","description":"User's free-text description of what they need"},"context":{"additionalProperties":true,"type":"object","title":"Context","description":"Optional {step, role}"}},"type":"object","required":["message"],"title":"IntakeRequest"},"IntegrationStatusResponse":{"properties":{"rfq_import_configured":{"type":"boolean","title":"Rfq Import Configured"},"rfq_export_configured":{"type":"boolean","title":"Rfq Export Configured"},"import_url":{"type":"string","title":"Import Url","default":""},"export_url":{"type":"string","title":"Export Url","default":""},"pending_rfqs":{"type":"integer","title":"Pending Rfqs","default":0}},"type":"object","required":["rfq_import_configured","rfq_export_configured"],"title":"IntegrationStatusResponse"},"InvoiceLineIn":{"properties":{"product_id":{"type":"string","title":"Product Id"},"qty":{"type":"number","title":"Qty"},"unit_price":{"type":"number","title":"Unit Price"}},"type":"object","required":["product_id","qty","unit_price"],"title":"InvoiceLineIn"},"InvoicePayload":{"properties":{"invoice_number":{"type":"string","title":"Invoice Number","default":""},"currency":{"type":"string","title":"Currency","default":"PLN"},"fx_rate":{"type":"number","title":"Fx Rate","default":1.0},"lines":{"items":{"$ref":"#/components/schemas/InvoiceLineIn"},"type":"array","title":"Lines","default":[]}},"type":"object","title":"InvoicePayload"},"IterationLog":{"properties":{"iteration":{"type":"integer","title":"Iteration"},"objective_value":{"type":"number","title":"Objective Value"},"primal_infeasibility":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Primal Infeasibility"}},"type":"object","required":["iteration","objective_value"],"title":"IterationLog"},"KsefSendRequest":{"properties":{"invoice_id":{"type":"integer","title":"Invoice Id"}},"type":"object","required":["invoice_id"],"title":"KsefSendRequest"},"LeadTimeResponse":{"properties":{"transitions":{"items":{"$ref":"#/components/schemas/TransitionStat"},"type":"array","title":"Transitions"},"case_durations":{"$ref":"#/components/schemas/CaseDurationStats"}},"type":"object","required":["transitions","case_durations"],"title":"LeadTimeResponse","description":"Lead time analysis between activities."},"LoginRequest":{"properties":{"username":{"type":"string","title":"Username"},"password":{"type":"string","title":"Password"},"tenant_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tenant Id"}},"type":"object","required":["username","password"],"title":"LoginRequest"},"MipAllocationRow":{"properties":{"supplier_id":{"type":"string","title":"Supplier Id"},"supplier_name":{"type":"string","title":"Supplier Name"},"product_id":{"type":"string","title":"Product Id"},"allocated_qty":{"type":"number","title":"Allocated Qty"},"allocated_fraction":{"type":"number","title":"Allocated Fraction","default":1.0},"unit_cost":{"type":"number","title":"Unit Cost"},"logistics_cost":{"type":"number","title":"Logistics Cost"},"lead_time_days":{"type":"number","title":"Lead Time Days"},"compliance_score":{"type":"number","title":"Compliance Score"},"esg_score":{"type":"number","title":"Esg Score"},"total_line_cost":{"type":"number","title":"Total Line Cost","default":0.0}},"type":"object","required":["supplier_id","supplier_name","product_id","allocated_qty","unit_cost","logistics_cost","lead_time_days","compliance_score","esg_score"],"title":"MipAllocationRow","description":"Single allocation in MIP result (binary = full demand to one supplier)."},"MipDiagnostics":{"properties":{"total_cost_pln":{"type":"number","title":"Total Cost Pln","default":0.0},"budget_used_pct":{"type":"number","title":"Budget Used Pct","default":0.0},"suppliers_selected":{"type":"integer","title":"Suppliers Selected","default":0},"products_covered":{"type":"integer","title":"Products Covered","default":0},"infeasible_products":{"items":{"type":"string"},"type":"array","title":"Infeasible Products","default":[]},"sla_floor_active":{"type":"boolean","title":"Sla Floor Active","default":false},"budget_ceiling_active":{"type":"boolean","title":"Budget Ceiling Active","default":false},"max_products_per_supplier_active":{"type":"boolean","title":"Max Products Per Supplier Active","default":false}},"type":"object","title":"MipDiagnostics","description":"Diagnostics from the dedicated MIP engine."},"MipObjectiveBreakdown":{"properties":{"total":{"type":"number","title":"Total"},"cost_component":{"type":"number","title":"Cost Component"},"time_component":{"type":"number","title":"Time Component"},"compliance_component":{"type":"number","title":"Compliance Component"},"esg_component":{"type":"number","title":"Esg Component"}},"type":"object","required":["total","cost_component","time_component","compliance_component","esg_component"],"title":"MipObjectiveBreakdown","description":"Objective function breakdown for MIP."},"MipOptimizationRequest":{"properties":{"suppliers":{"items":{"$ref":"#/components/schemas/SupplierInput"},"type":"array","minItems":1,"title":"Suppliers"},"demand":{"items":{"$ref":"#/components/schemas/DemandItem"},"type":"array","minItems":1,"title":"Demand"},"weights":{"$ref":"#/components/schemas/CriteriaWeights"},"max_vendor_share":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Max Vendor Share","description":"Max fraction per supplier (1.0 = no limit)","default":1.0},"sla_floor":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Sla Floor","description":"Min compliance/SLA score to be eligible"},"total_budget":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"null"}],"title":"Total Budget","description":"Budget ceiling in PLN"},"max_products_per_supplier":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Max Products Per Supplier","description":"Max products one supplier can serve"},"constraints":{"anyOf":[{"$ref":"#/components/schemas/ConstraintConfig"},{"type":"null"}],"description":"Advanced constraints C10-C15 (optional)"}},"type":"object","required":["suppliers","demand"],"title":"MipOptimizationRequest","description":"Request for the dedicated MIP endpoint with IT-specific constraints."},"MipOptimizationResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"message":{"type":"string","title":"Message","default":""},"status":{"type":"string","title":"Status","default":"unknown"},"solve_time_ms":{"type":"number","title":"Solve Time Ms","default":0.0},"objective":{"$ref":"#/components/schemas/MipObjectiveBreakdown"},"allocations":{"items":{"$ref":"#/components/schemas/MipAllocationRow"},"type":"array","title":"Allocations","default":[]},"diagnostics":{"$ref":"#/components/schemas/MipDiagnostics"},"weights_used":{"$ref":"#/components/schemas/CriteriaWeights"}},"type":"object","required":["success","objective","diagnostics","weights_used"],"title":"MipOptimizationResponse","description":"Response from the dedicated MIP engine."},"MonteCarloRequest":{"properties":{"suppliers":{"items":{"$ref":"#/components/schemas/SupplierInput"},"type":"array","minItems":1,"title":"Suppliers"},"demand":{"items":{"$ref":"#/components/schemas/DemandItem"},"type":"array","minItems":1,"title":"Demand"},"weights":{"$ref":"#/components/schemas/CriteriaWeights"},"n_iterations":{"type":"integer","maximum":5000.0,"minimum":50.0,"title":"N Iterations","default":500},"cost_std_pct":{"type":"number","maximum":0.5,"minimum":0.01,"title":"Cost Std Pct","default":0.1},"time_std_pct":{"type":"number","maximum":0.5,"minimum":0.01,"title":"Time Std Pct","default":0.15},"max_vendor_share":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Max Vendor Share","default":1.0},"seed":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Seed","default":42}},"type":"object","required":["suppliers","demand"],"title":"MonteCarloRequest"},"MonteCarloResponse":{"properties":{"n_iterations":{"type":"integer","title":"N Iterations"},"feasible_rate":{"type":"number","title":"Feasible Rate"},"cost_mean_pln":{"type":"number","title":"Cost Mean Pln"},"cost_std_pln":{"type":"number","title":"Cost Std Pln"},"cost_p5_pln":{"type":"number","title":"Cost P5 Pln"},"cost_p95_pln":{"type":"number","title":"Cost P95 Pln"},"objective_mean":{"type":"number","title":"Objective Mean"},"objective_std":{"type":"number","title":"Objective Std"},"robustness_score":{"type":"number","title":"Robustness Score"},"supplier_stability":{"items":{"$ref":"#/components/schemas/SupplierStability"},"type":"array","title":"Supplier Stability"},"cost_histogram":{"items":{"type":"number"},"type":"array","title":"Cost Histogram","description":"Binned cost distribution"}},"type":"object","required":["n_iterations","feasible_rate","cost_mean_pln","cost_std_pln","cost_p5_pln","cost_p95_pln","objective_mean","objective_std","robustness_score","supplier_stability"],"title":"MonteCarloResponse"},"NegotiationResponse":{"properties":{"targets":{"items":{"$ref":"#/components/schemas/NegotiationTargetSchema"},"type":"array","title":"Targets"},"total_estimated_savings_pln":{"type":"number","title":"Total Estimated Savings Pln"},"analyzed_suppliers":{"type":"integer","title":"Analyzed Suppliers"}},"type":"object","required":["targets","total_estimated_savings_pln","analyzed_suppliers"],"title":"NegotiationResponse"},"NegotiationTargetSchema":{"properties":{"supplier_id":{"type":"string","title":"Supplier Id"},"supplier_name":{"type":"string","title":"Supplier Name"},"current_share_pct":{"type":"number","title":"Current Share Pct"},"current_total_cost_pln":{"type":"number","title":"Current Total Cost Pln"},"estimated_saving_pln":{"type":"number","title":"Estimated Saving Pln"},"target_reduction_pct":{"type":"number","title":"Target Reduction Pct"},"negotiation_priority":{"type":"string","title":"Negotiation Priority"},"rationale":{"type":"string","title":"Rationale"}},"type":"object","required":["supplier_id","supplier_name","current_share_pct","current_total_cost_pln","estimated_saving_pln","target_reduction_pct","negotiation_priority","rationale"],"title":"NegotiationTargetSchema"},"ObjectiveBreakdown":{"properties":{"total":{"type":"number","title":"Total"},"cost_component":{"type":"number","title":"Cost Component"},"time_component":{"type":"number","title":"Time Component"},"compliance_component":{"type":"number","title":"Compliance Component"},"esg_component":{"type":"number","title":"Esg Component"}},"type":"object","required":["total","cost_component","time_component","compliance_component","esg_component"],"title":"ObjectiveBreakdown","description":"Breakdown of the objective function value."},"OnboardTenantRequest":{"properties":{"nip":{"type":"string","title":"Nip","description":"Polish NIP (10 digits) — drives company lookup"},"tenant_slug":{"type":"string","maxLength":40,"minLength":3,"title":"Tenant Slug","description":"kebab-case slug, e.g. 'intercars'"},"plan":{"type":"string","title":"Plan","default":"professional"},"admin_email":{"type":"string","title":"Admin Email"},"admin_username":{"type":"string","title":"Admin Username","default":"admin"},"admin_password":{"type":"string","title":"Admin Password","default":"ChangeMe-1!"},"industry":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Industry"},"seed_demo_suppliers":{"type":"boolean","title":"Seed Demo Suppliers","default":true}},"type":"object","required":["nip","tenant_slug","admin_email"],"title":"OnboardTenantRequest"},"OptimizationAlertRequest":{"properties":{"result":{"additionalProperties":true,"type":"object","title":"Result","description":"Optimization result dict (from /optimize or /mip/optimize)"},"thresholds":{"anyOf":[{"$ref":"#/components/schemas/AlertThresholds"},{"type":"null"}]}},"type":"object","required":["result"],"title":"OptimizationAlertRequest","description":"Request for optimization alerts — includes solver result + thresholds."},"OptimizationRequest":{"properties":{"suppliers":{"items":{"$ref":"#/components/schemas/SupplierInput"},"type":"array","minItems":1,"title":"Suppliers"},"demand":{"items":{"$ref":"#/components/schemas/DemandItem"},"type":"array","minItems":1,"title":"Demand"},"weights":{"$ref":"#/components/schemas/CriteriaWeights"},"mode":{"$ref":"#/components/schemas/SolverMode","default":"continuous"},"max_vendor_share":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Max Vendor Share","description":"Vendor Diversification Policy — maximum fraction of total volume any single supplier can receive (0.6 = 60%). Set to 1.0 to disable.","default":0.6},"constraints":{"anyOf":[{"$ref":"#/components/schemas/ConstraintConfig"},{"type":"null"}],"description":"Advanced constraints C10-C15 (optional)"}},"type":"object","required":["suppliers","demand"],"title":"OptimizationRequest","description":"Full payload sent to /optimize."},"OptimizationResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"message":{"type":"string","title":"Message","default":""},"solver_stats":{"$ref":"#/components/schemas/SolverStats"},"objective":{"$ref":"#/components/schemas/ObjectiveBreakdown"},"allocations":{"items":{"$ref":"#/components/schemas/AllocationRow"},"type":"array","title":"Allocations","default":[]},"weights_used":{"$ref":"#/components/schemas/CriteriaWeights"},"shadow_prices":{"items":{"$ref":"#/components/schemas/ShadowPrice"},"type":"array","title":"Shadow Prices","default":[]}},"type":"object","required":["success","solver_stats","objective","weights_used"],"title":"OptimizationResponse","description":"Standard response from /optimize."},"OptimizerOrderRequest":{"properties":{"domain":{"type":"string","title":"Domain"},"allocations":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Allocations"},"demand":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Demand"},"objective":{"additionalProperties":true,"type":"object","title":"Objective","default":{}},"solver_stats":{"additionalProperties":true,"type":"object","title":"Solver Stats","default":{}},"mpk":{"type":"string","title":"Mpk","default":"INTER-ZAKUPY-01"},"gl_account":{"type":"string","title":"Gl Account","default":"400-Auto-Parts"}},"type":"object","required":["domain","allocations","demand"],"title":"OptimizerOrderRequest","description":"Create a Buying order directly from Tab 1 optimization results."},"POConfirmRequest":{"properties":{"confirmed_lines":{"anyOf":[{"items":{"$ref":"#/components/schemas/POConfirmedLineIn"},"type":"array"},{"type":"null"}],"title":"Confirmed Lines"}},"type":"object","title":"POConfirmRequest"},"POConfirmedLineIn":{"properties":{"product_id":{"type":"string","title":"Product Id"},"confirmed_qty":{"type":"number","title":"Confirmed Qty"}},"type":"object","required":["product_id","confirmed_qty"],"title":"POConfirmedLineIn"},"POCounterOfferIn":{"properties":{"proposed_lines":{"items":{"$ref":"#/components/schemas/POCounterOfferLineIn"},"type":"array","title":"Proposed Lines"},"proposed_delivery":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Proposed Delivery"},"expires_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expires At"}},"type":"object","required":["proposed_lines"],"title":"POCounterOfferIn"},"POCounterOfferLineIn":{"properties":{"product_id":{"type":"string","title":"Product Id"},"alt_qty":{"type":"number","title":"Alt Qty"},"alt_unit_cost":{"type":"number","title":"Alt Unit Cost"}},"type":"object","required":["product_id","alt_qty","alt_unit_cost"],"title":"POCounterOfferLineIn"},"POReceiveRequest":{"properties":{"items":{"items":{"$ref":"#/components/schemas/POReceivedLineIn"},"type":"array","title":"Items"}},"type":"object","required":["items"],"title":"POReceiveRequest"},"POReceivedLineIn":{"properties":{"product_id":{"type":"string","title":"Product Id"},"received_qty":{"type":"number","title":"Received Qty"}},"type":"object","required":["product_id","received_qty"],"title":"POReceivedLineIn"},"PORejectRequest":{"properties":{"reason":{"type":"string","title":"Reason"},"counter_offer":{"anyOf":[{"$ref":"#/components/schemas/POCounterOfferIn"},{"type":"null"}]}},"type":"object","required":["reason"],"title":"PORejectRequest"},"ParetoPoint":{"properties":{"lambda_param":{"type":"number","title":"Lambda Param"},"objective_total":{"type":"number","title":"Objective Total"},"cost_component":{"type":"number","title":"Cost Component"},"time_component":{"type":"number","title":"Time Component"},"compliance_component":{"type":"number","title":"Compliance Component"},"esg_component":{"type":"number","title":"Esg Component"}},"type":"object","required":["lambda_param","objective_total","cost_component","time_component","compliance_component","esg_component"],"title":"ParetoPoint","description":"One point on the Pareto front (one lambda value)."},"PerformanceDFGEdge":{"properties":{"source":{"type":"string","title":"Source"},"target":{"type":"string","title":"Target"},"count":{"type":"integer","title":"Count"},"avg_hours":{"type":"number","title":"Avg Hours"},"median_hours":{"type":"number","title":"Median Hours"},"p95_hours":{"type":"number","title":"P95 Hours"},"min_hours":{"type":"number","title":"Min Hours"},"max_hours":{"type":"number","title":"Max Hours"}},"type":"object","required":["source","target","count","avg_hours","median_hours","p95_hours","min_hours","max_hours"],"title":"PerformanceDFGEdge","description":"Edge in the performance DFG — weighted by transition time."},"PerformanceDFGResponse":{"properties":{"type":{"type":"string","title":"Type","default":"performance"},"nodes":{"items":{"type":"string"},"type":"array","title":"Nodes"},"edges":{"items":{"$ref":"#/components/schemas/PerformanceDFGEdge"},"type":"array","title":"Edges"},"total_cases":{"type":"integer","title":"Total Cases"},"total_events":{"type":"integer","title":"Total Events"}},"type":"object","required":["nodes","edges","total_cases","total_events"],"title":"PerformanceDFGResponse","description":"Performance DFG — edges weighted by avg transition time (hours)."},"PlaceOrderRequest":{"properties":{"optimization_id":{"type":"string","title":"Optimization Id"}},"type":"object","required":["optimization_id"],"title":"PlaceOrderRequest"},"PredictionInput":{"properties":{"supplier_id":{"type":"string","title":"Supplier Id"},"product_id":{"type":"string","title":"Product Id","default":""},"domain":{"type":"string","title":"Domain","default":"parts"},"quantity":{"type":"number","title":"Quantity","default":100},"destination_region":{"type":"string","title":"Destination Region","default":"PL"},"order_value_pln":{"type":"number","title":"Order Value Pln","default":0.0}},"type":"object","required":["supplier_id"],"title":"PredictionInput"},"ProcessAlertRequest":{"properties":{"events":{"items":{"additionalProperties":true,"type":"object"},"type":"array","minItems":2,"title":"Events"},"thresholds":{"anyOf":[{"$ref":"#/components/schemas/AlertThresholds"},{"type":"null"}]},"sla_target_hours":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"null"}],"title":"Sla Target Hours"}},"type":"object","required":["events"],"title":"ProcessAlertRequest","description":"Request for process alerts — includes event log."},"ProcessMiningRequest":{"properties":{"events":{"items":{"$ref":"#/components/schemas/EventLogEntry"},"type":"array","minItems":2,"title":"Events","description":"Event log entries"},"top_n":{"type":"integer","maximum":50.0,"minimum":1.0,"title":"Top N","description":"Number of top bottlenecks to return","default":5}},"type":"object","required":["events"],"title":"ProcessMiningRequest","description":"Input for Process Mining endpoints."},"ProfileUpdateIn":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address"},"city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City"},"postal_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Postal Code"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"website":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website"},"duns_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Duns Number"}},"type":"object","title":"ProfileUpdateIn"},"PunchOutCartItem":{"properties":{"item_id":{"type":"string","title":"Item Id"},"name":{"type":"string","title":"Name"},"price":{"type":"number","title":"Price"},"qty":{"type":"integer","title":"Qty","default":1}},"type":"object","required":["item_id","name","price"],"title":"PunchOutCartItem"},"PunchOutSetupRequest":{"properties":{"buyer_cookie":{"type":"string","title":"Buyer Cookie","default":""},"browser_form_post_url":{"type":"string","title":"Browser Form Post Url","default":""}},"type":"object","title":"PunchOutSetupRequest"},"RefreshTokenRequest":{"properties":{"refresh_token":{"type":"string","title":"Refresh Token"}},"type":"object","required":["refresh_token"],"title":"RefreshTokenRequest"},"RegisterRequest":{"properties":{"username":{"type":"string","title":"Username"},"password":{"type":"string","title":"Password"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"role":{"type":"string","title":"Role","default":"buyer"},"supplier_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Supplier Id"},"tenant_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tenant Id"}},"type":"object","required":["username","password"],"title":"RegisterRequest"},"ReportQueryRequest":{"properties":{"question":{"type":"string","maxLength":500,"minLength":3,"title":"Question"}},"type":"object","required":["question"],"title":"ReportQueryRequest"},"ReservationRequest":{"properties":{"order_id":{"type":"string","title":"Order Id"},"product_id":{"type":"string","title":"Product Id"},"qty":{"type":"integer","title":"Qty"},"warehouse":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Warehouse"}},"type":"object","required":["order_id","product_id","qty"],"title":"ReservationRequest"},"ReworkActivityStat":{"properties":{"activity":{"type":"string","title":"Activity"},"rework_count":{"type":"integer","title":"Rework Count"},"case_count":{"type":"integer","title":"Case Count","default":0}},"type":"object","required":["activity","rework_count"],"title":"ReworkActivityStat","description":"Activity frequently involved in rework."},"ReworkCase":{"properties":{"case_id":{"type":"string","title":"Case Id"},"repeated_activities":{"items":{"type":"string"},"type":"array","title":"Repeated Activities"},"rework_count":{"type":"integer","title":"Rework Count"},"extra_cost":{"type":"number","title":"Extra Cost","default":0.0}},"type":"object","required":["case_id","repeated_activities","rework_count"],"title":"ReworkCase","description":"Case with repeated activities (rework/loops)."},"ReworkResponse":{"properties":{"rework_cases":{"items":{"$ref":"#/components/schemas/ReworkCase"},"type":"array","title":"Rework Cases"},"rework_rate":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Rework Rate"},"total_rework_cost":{"type":"number","title":"Total Rework Cost","default":0.0},"most_reworked_activities":{"items":{"$ref":"#/components/schemas/ReworkActivityStat"},"type":"array","title":"Most Reworked Activities"},"total_cases":{"type":"integer","title":"Total Cases"},"cases_with_rework":{"type":"integer","title":"Cases With Rework"}},"type":"object","required":["rework_cases","rework_rate","most_reworked_activities","total_cases","cases_with_rework"],"title":"ReworkResponse","description":"Rework detection analysis."},"RfqExportRequest":{"properties":{"rfq_id":{"type":"string","title":"Rfq Id"},"allocations":{"items":{"$ref":"#/components/schemas/AllocationRow"},"type":"array","title":"Allocations"},"line_items":{"items":{"$ref":"#/components/schemas/RfqLineItem"},"type":"array","title":"Line Items"}},"type":"object","required":["rfq_id","allocations","line_items"],"title":"RfqExportRequest"},"RfqExportResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"rfq_id":{"type":"string","title":"Rfq Id"},"export_format":{"type":"string","title":"Export Format","default":"GENERIC-RFQ-JSON"},"rows":{"items":{"$ref":"#/components/schemas/RfqExportRow"},"type":"array","title":"Rows"},"total_value_pln":{"type":"number","title":"Total Value Pln"}},"type":"object","required":["success","rfq_id","rows","total_value_pln"],"title":"RfqExportResponse"},"RfqExportRow":{"properties":{"rfq_id":{"type":"string","title":"Rfq Id"},"line_item_id":{"type":"string","title":"Line Item Id"},"awarded_supplier_id":{"type":"string","title":"Awarded Supplier Id"},"awarded_supplier_name":{"type":"string","title":"Awarded Supplier Name"},"material_number":{"type":"string","title":"Material Number"},"awarded_quantity":{"type":"number","title":"Awarded Quantity"},"unit_price":{"type":"number","title":"Unit Price"},"logistics_cost":{"type":"number","title":"Logistics Cost"},"total_line_value_pln":{"type":"number","title":"Total Line Value Pln"},"lead_time_days":{"type":"number","title":"Lead Time Days"},"purchase_order_type":{"type":"string","title":"Purchase Order Type","default":"STANDARD"},"plant":{"type":"string","title":"Plant","default":"PL01"}},"type":"object","required":["rfq_id","line_item_id","awarded_supplier_id","awarded_supplier_name","material_number","awarded_quantity","unit_price","logistics_cost","total_line_value_pln","lead_time_days"],"title":"RfqExportRow","description":"Single row in an RFQ export (generic — works with any ERP/sourcing system)."},"RfqHeader":{"properties":{"rfq_id":{"type":"string","title":"Rfq Id","examples":["RFQ-2026-001"]},"title":{"type":"string","title":"Title","default":""},"procurement_domain":{"type":"string","title":"Procurement Domain","default":"parts"},"buyer_org":{"type":"string","title":"Buyer Org","default":"Flow Procurement SA"},"created_at":{"type":"string","title":"Created At","default":""},"deadline":{"type":"string","title":"Deadline","default":""},"currency":{"type":"string","title":"Currency","default":"PLN"},"line_items":{"items":{"$ref":"#/components/schemas/RfqLineItem"},"type":"array","minItems":1,"title":"Line Items"},"bids":{"items":{"$ref":"#/components/schemas/RfqSupplierBid"},"type":"array","title":"Bids"},"status":{"type":"string","title":"Status","description":"draft|active|closed|awarded","default":"draft"}},"type":"object","required":["rfq_id","line_items"],"title":"RfqHeader","description":"Generic RFQ header — compatible with any sourcing system."},"RfqImportRequest":{"properties":{"rfq":{"$ref":"#/components/schemas/RfqHeader"},"auto_optimize":{"type":"boolean","title":"Auto Optimize","description":"Run optimizer immediately after import","default":false},"optimization_mode":{"$ref":"#/components/schemas/SolverMode","default":"continuous"}},"type":"object","required":["rfq"],"title":"RfqImportRequest"},"RfqLineItem":{"properties":{"line_item_id":{"type":"string","title":"Line Item Id","examples":["LI-001"]},"material_number":{"type":"string","title":"Material Number","examples":["BRK-PAD-0041"]},"description":{"type":"string","title":"Description","default":""},"quantity":{"type":"number","exclusiveMinimum":0.0,"title":"Quantity"},"unit_of_measure":{"type":"string","title":"Unit Of Measure","default":"PC","examples":["PC","KG","L"]},"required_delivery_date":{"type":"string","title":"Required Delivery Date","description":"ISO date YYYY-MM-DD"},"destination_plant":{"type":"string","title":"Destination Plant","description":"Plant / warehouse code","default":"PL01"},"destination_region":{"type":"string","title":"Destination Region","description":"Region code e.g. 'PL-MA'"},"estimated_unit_price":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Estimated Unit Price"},"currency":{"type":"string","title":"Currency","default":"PLN"}},"type":"object","required":["line_item_id","material_number","quantity","required_delivery_date","destination_region"],"title":"RfqLineItem","description":"Single line item in an RFQ."},"RfqResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"rfq_id":{"type":"string","title":"Rfq Id"},"message":{"type":"string","title":"Message","default":""},"imported_line_items":{"type":"integer","title":"Imported Line Items","default":0},"imported_bids":{"type":"integer","title":"Imported Bids","default":0},"optimization_result":{"anyOf":[{"$ref":"#/components/schemas/OptimizationResponse"},{"type":"null"}]}},"type":"object","required":["success","rfq_id"],"title":"RfqResponse"},"RfqSupplierBid":{"properties":{"supplier_id":{"type":"string","title":"Supplier Id"},"supplier_name":{"type":"string","title":"Supplier Name"},"line_item_id":{"type":"string","title":"Line Item Id"},"bid_unit_price":{"type":"number","minimum":0.0,"title":"Bid Unit Price"},"bid_logistics_cost":{"type":"number","minimum":0.0,"title":"Bid Logistics Cost","default":0.0},"lead_time_days":{"type":"number","minimum":0.0,"title":"Lead Time Days"},"compliance_score":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Compliance Score"},"esg_score":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Esg Score"},"payment_terms_days":{"type":"number","minimum":0.0,"title":"Payment Terms Days","default":30.0},"capacity":{"type":"number","exclusiveMinimum":0.0,"title":"Capacity"},"regions_served":{"items":{"type":"string"},"type":"array","minItems":1,"title":"Regions Served"},"valid_until":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Valid Until"}},"type":"object","required":["supplier_id","supplier_name","line_item_id","bid_unit_price","lead_time_days","compliance_score","esg_score","capacity","regions_served"],"title":"RfqSupplierBid","description":"Supplier's bid response to an RFQ line item."},"RiskCellSchema":{"properties":{"supplier_id":{"type":"string","title":"Supplier Id"},"supplier_name":{"type":"string","title":"Supplier Name"},"product_id":{"type":"string","title":"Product Id"},"risk_score":{"type":"number","title":"Risk Score"},"single_source_risk":{"type":"number","title":"Single Source Risk"},"capacity_utilization":{"type":"number","title":"Capacity Utilization"},"esg_risk":{"type":"number","title":"Esg Risk"},"risk_label":{"type":"string","title":"Risk Label"}},"type":"object","required":["supplier_id","supplier_name","product_id","risk_score","single_source_risk","capacity_utilization","esg_risk","risk_label"],"title":"RiskCellSchema"},"RiskHeatmapResponse":{"properties":{"cells":{"items":{"$ref":"#/components/schemas/RiskCellSchema"},"type":"array","title":"Cells"},"suppliers":{"items":{"type":"string"},"type":"array","title":"Suppliers"},"products":{"items":{"type":"string"},"type":"array","title":"Products"},"critical_count":{"type":"integer","title":"Critical Count","default":0},"high_count":{"type":"integer","title":"High Count","default":0},"overall_risk_score":{"type":"number","title":"Overall Risk Score","default":0.0}},"type":"object","required":["cells","suppliers","products"],"title":"RiskHeatmapResponse"},"RuleIn":{"properties":{"id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Id"},"rule_type":{"type":"string","title":"Rule Type"},"rule_key":{"type":"string","title":"Rule Key"},"config":{"additionalProperties":true,"type":"object","title":"Config"},"is_active":{"type":"boolean","title":"Is Active","default":true},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"}},"type":"object","required":["rule_type","rule_key","config"],"title":"RuleIn"},"SLACase":{"properties":{"case_id":{"type":"string","title":"Case Id"},"duration_hours":{"type":"number","title":"Duration Hours"},"target_hours":{"type":"number","title":"Target Hours"},"within_sla":{"type":"boolean","title":"Within Sla"},"excess_hours":{"type":"number","title":"Excess Hours","default":0.0}},"type":"object","required":["case_id","duration_hours","target_hours","within_sla"],"title":"SLACase","description":"SLA monitoring per case."},"SLAMonitorResponse":{"properties":{"target_hours":{"type":"number","title":"Target Hours"},"total_cases":{"type":"integer","title":"Total Cases"},"cases_within_sla":{"type":"integer","title":"Cases Within Sla"},"breach_count":{"type":"integer","title":"Breach Count"},"breach_rate":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Breach Rate"},"breaches":{"items":{"$ref":"#/components/schemas/SLACase"},"type":"array","title":"Breaches"},"avg_duration_hours":{"type":"number","title":"Avg Duration Hours","default":0.0},"median_duration_hours":{"type":"number","title":"Median Duration Hours","default":0.0}},"type":"object","required":["target_hours","total_cases","cases_within_sla","breach_count","breach_rate","breaches"],"title":"SLAMonitorResponse","description":"SLA monitoring results."},"SLARequest":{"properties":{"events":{"items":{"additionalProperties":true,"type":"object"},"type":"array","minItems":2,"title":"Events"},"target_hours":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"null"}],"title":"Target Hours","description":"SLA target in hours. If omitted, auto-calculated as median * 1.5."}},"type":"object","required":["events"],"title":"SLARequest","description":"Request for SLA monitoring with configurable target."},"SankeyLink":{"properties":{"source":{"type":"string","title":"Source"},"target":{"type":"string","title":"Target"},"value":{"type":"number","title":"Value"},"label":{"type":"string","title":"Label","default":""}},"type":"object","required":["source","target","value"],"title":"SankeyLink"},"SankeyNode":{"properties":{"id":{"type":"string","title":"Id"},"label":{"type":"string","title":"Label"},"type":{"type":"string","title":"Type"}},"type":"object","required":["id","label","type"],"title":"SankeyNode"},"SankeyResponse":{"properties":{"nodes":{"items":{"$ref":"#/components/schemas/SankeyNode"},"type":"array","title":"Nodes"},"links":{"items":{"$ref":"#/components/schemas/SankeyLink"},"type":"array","title":"Links"},"total_flow":{"type":"number","title":"Total Flow"}},"type":"object","required":["nodes","links","total_flow"],"title":"SankeyResponse"},"ScenarioResultSchema":{"properties":{"label":{"type":"string","title":"Label"},"mode":{"type":"string","title":"Mode"},"success":{"type":"boolean","title":"Success"},"message":{"type":"string","title":"Message","default":""},"objective_total":{"type":"number","title":"Objective Total","default":0.0},"cost_component":{"type":"number","title":"Cost Component","default":0.0},"time_component":{"type":"number","title":"Time Component","default":0.0},"compliance_component":{"type":"number","title":"Compliance Component","default":0.0},"esg_component":{"type":"number","title":"Esg Component","default":0.0},"total_cost_pln":{"type":"number","title":"Total Cost Pln","default":0.0},"suppliers_used":{"type":"integer","title":"Suppliers Used","default":0},"products_covered":{"type":"integer","title":"Products Covered","default":0},"solve_time_ms":{"type":"number","title":"Solve Time Ms","default":0.0},"allocations_count":{"type":"integer","title":"Allocations Count","default":0}},"type":"object","required":["label","mode","success"],"title":"ScenarioResultSchema","description":"Result of a single scenario."},"ScenarioSpec":{"properties":{"label":{"type":"string","maxLength":50,"minLength":1,"title":"Label"},"lambda_param":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Lambda Param","default":0.5},"w_cost":{"type":"number","maximum":1.0,"minimum":0.0,"title":"W Cost","default":0.4},"w_time":{"type":"number","maximum":1.0,"minimum":0.0,"title":"W Time","default":0.3},"w_compliance":{"type":"number","maximum":1.0,"minimum":0.0,"title":"W Compliance","default":0.15},"w_esg":{"type":"number","maximum":1.0,"minimum":0.0,"title":"W Esg","default":0.15},"mode":{"$ref":"#/components/schemas/SolverMode","default":"continuous"},"max_vendor_share":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Max Vendor Share","default":1.0},"sla_floor":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Sla Floor"},"total_budget":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"null"}],"title":"Total Budget"},"max_products_per_supplier":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Max Products Per Supplier"}},"type":"object","required":["label"],"title":"ScenarioSpec","description":"Parameters for one what-if scenario."},"SelfAssessmentAnswer":{"properties":{"question_id":{"type":"string","title":"Question Id"},"score":{"type":"integer","maximum":5.0,"minimum":1.0,"title":"Score"},"comment":{"type":"string","title":"Comment","default":""}},"type":"object","required":["question_id","score"],"title":"SelfAssessmentAnswer"},"SelfAssessmentResponse":{"properties":{"supplier_id":{"type":"string","title":"Supplier Id"},"submitted_at":{"type":"string","title":"Submitted At"},"answers":{"items":{"$ref":"#/components/schemas/SelfAssessmentAnswer"},"type":"array","title":"Answers"},"overall_score":{"type":"number","title":"Overall Score"},"category_scores":{"additionalProperties":{"type":"number"},"type":"object","title":"Category Scores"}},"type":"object","required":["supplier_id","submitted_at","answers","overall_score","category_scores"],"title":"SelfAssessmentResponse"},"ShadowPrice":{"properties":{"constraint_id":{"type":"string","title":"Constraint Id"},"label":{"type":"string","title":"Label"},"kind":{"type":"string","title":"Kind"},"value":{"type":"number","title":"Value"},"slack":{"type":"number","title":"Slack","default":0.0}},"type":"object","required":["constraint_id","label","kind","value"],"title":"ShadowPrice","description":"Dual value for one solver constraint (LP sensitivity analysis, B1).\n\nA positive `value` for an inequality (≤) constraint means tightening\nthe bound by 1 unit would worsen the objective by `value`. Negative on\na ≥ constraint means the same. The UI surfaces the biggest |value| so\nbuyers see which constraint is costliest to keep active."},"ShiftedVariant":{"properties":{"variant":{"type":"string","title":"Variant"},"period_a_pct":{"type":"number","title":"Period A Pct"},"period_b_pct":{"type":"number","title":"Period B Pct"},"delta_pct":{"type":"number","title":"Delta Pct"}},"type":"object","required":["variant","period_a_pct","period_b_pct","delta_pct"],"title":"ShiftedVariant","description":"A single variant's share change between period A and period B."},"SlowCase":{"properties":{"case_id":{"type":"string","title":"Case Id"},"duration_hours":{"type":"number","title":"Duration Hours"},"num_events":{"type":"integer","title":"Num Events"},"trace":{"type":"string","title":"Trace"}},"type":"object","required":["case_id","duration_hours","num_events","trace"],"title":"SlowCase"},"SolverMode":{"type":"string","enum":["continuous","mip"],"title":"SolverMode"},"SolverStats":{"properties":{"status":{"type":"string","title":"Status"},"iterations":{"type":"integer","title":"Iterations","default":0},"solve_time_ms":{"type":"number","title":"Solve Time Ms","default":0.0},"mode":{"$ref":"#/components/schemas/SolverMode"},"diversification_active":{"type":"boolean","title":"Diversification Active","default":false},"max_vendor_share":{"type":"number","title":"Max Vendor Share","default":1.0}},"type":"object","required":["status","mode"],"title":"SolverStats","description":"Basic solver statistics."},"StealthRequest":{"properties":{"suppliers":{"items":{"$ref":"#/components/schemas/SupplierInput"},"type":"array","title":"Suppliers"},"demand":{"items":{"$ref":"#/components/schemas/DemandItem"},"type":"array","title":"Demand"},"weights":{"$ref":"#/components/schemas/CriteriaWeights"},"mode":{"$ref":"#/components/schemas/SolverMode","default":"continuous"},"max_vendor_share":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Max Vendor Share","default":0.6}},"type":"object","required":["suppliers","demand"],"title":"StealthRequest","description":"Same input as OptimizationRequest but returns raw diagnostics."},"StealthResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"solver_name":{"type":"string","title":"Solver Name"},"solver_status":{"type":"string","title":"Solver Status"},"solve_time_ms":{"type":"number","title":"Solve Time Ms"},"objective_value":{"type":"number","title":"Objective Value"},"objective_equation":{"type":"string","title":"Objective Equation","description":"Human-readable objective function string"},"variables":{"items":{"$ref":"#/components/schemas/VariableLog"},"type":"array","title":"Variables"},"constraints":{"items":{"$ref":"#/components/schemas/ConstraintLog"},"type":"array","title":"Constraints"},"iterations":{"items":{"$ref":"#/components/schemas/IterationLog"},"type":"array","title":"Iterations"},"raw_log":{"type":"string","title":"Raw Log","description":"Full HiGHS solver output","default":""},"allocation_result":{"$ref":"#/components/schemas/OptimizationResponse"}},"type":"object","required":["success","solver_name","solver_status","solve_time_ms","objective_value","objective_equation","variables","constraints","iterations","allocation_result"],"title":"StealthResponse","description":"Raw solver diagnostics for analysts."},"SubDomain":{"type":"string","enum":["brake_systems","filters","suspension","engine_parts","electrical","transmission","engine_oils","transmission_fluids","starter_batteries","agm_efb","summer_tires","winter_tires","all_season","body_panels","lighting","glass","development","cloud_infra","data_analytics","domestic","international","last_mile","cardboard","plastics","maintenance","safety_equipment","cleaning"],"title":"SubDomain","description":"Subdomeny zakupowe — po 2-4 na domenę główną."},"SupplierCatalogCreateIn":{"properties":{"sku":{"type":"string","title":"Sku"},"name":{"type":"string","title":"Name"},"price":{"type":"number","title":"Price"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"currency":{"type":"string","title":"Currency","default":"PLN"},"unit":{"type":"string","title":"Unit","default":"szt"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"unspsc_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Unspsc Code"},"manufacturer":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Manufacturer"},"ean":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ean"},"image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image Url"},"min_order_qty":{"type":"integer","title":"Min Order Qty","default":1},"delivery_days":{"type":"integer","title":"Delivery Days","default":3},"valid_from":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Valid From"},"valid_to":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Valid To"},"status":{"type":"string","title":"Status","default":"published"}},"type":"object","required":["sku","name","price"],"title":"SupplierCatalogCreateIn"},"SupplierCatalogUpdateIn":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Price"},"currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Currency"},"unit":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Unit"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"unspsc_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Unspsc Code"},"manufacturer":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Manufacturer"},"ean":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ean"},"image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image Url"},"min_order_qty":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Min Order Qty"},"delivery_days":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Delivery Days"},"valid_from":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Valid From"},"valid_to":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Valid To"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},"type":"object","title":"SupplierCatalogUpdateIn"},"SupplierCertificate":{"properties":{"cert_id":{"type":"string","title":"Cert Id","default":""},"cert_type":{"$ref":"#/components/schemas/CertificationType","default":"iso_9001"},"issuer":{"type":"string","title":"Issuer","default":""},"issue_date":{"type":"string","title":"Issue Date","default":""},"expiry_date":{"type":"string","title":"Expiry Date","default":""},"file_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"File Url"},"notes":{"type":"string","title":"Notes","default":""}},"type":"object","title":"SupplierCertificate"},"SupplierCreateRequest":{"properties":{"nip":{"type":"string","maxLength":10,"minLength":10,"title":"Nip"},"name_override":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name Override"},"address_override":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address Override"},"domains":{"items":{"type":"string"},"type":"array","title":"Domains"}},"type":"object","required":["nip"],"title":"SupplierCreateRequest"},"SupplierInput":{"properties":{"supplier_id":{"type":"string","title":"Supplier Id","examples":["SUP-001"]},"name":{"type":"string","title":"Name","examples":["AutoParts Kraków"]},"unit_cost":{"type":"number","minimum":0.0,"title":"Unit Cost","description":"PLN per unit (material or hourly rate)"},"logistics_cost":{"type":"number","minimum":0.0,"title":"Logistics Cost","description":"PLN per unit (transport / overhead)","default":0.0},"lead_time_days":{"type":"number","minimum":0.0,"title":"Lead Time Days","description":"Expected lead-time / delivery in days"},"compliance_score":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Compliance Score","description":"Reliability / compliance / SLA index 0..1 (1 = perfect)"},"esg_score":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Esg Score","description":"ESG / reliability index 0..1 (1 = best)"},"min_order_qty":{"type":"number","minimum":0.0,"title":"Min Order Qty","description":"Minimum order quantity","default":0.0},"max_capacity":{"type":"number","exclusiveMinimum":0.0,"title":"Max Capacity","description":"Maximum supply capacity (units / hours)"},"served_regions":{"items":{"type":"string"},"type":"array","minItems":1,"title":"Served Regions","description":"Region codes the supplier covers, e.g. ['PL-MA', 'PL-SL']"},"payment_terms_days":{"type":"number","minimum":0.0,"title":"Payment Terms Days","description":"Days to payment (Net30=30, Net60=60)","default":30.0},"contract_min_allocation":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Contract Min Allocation","description":"C14: mandatory minimum allocation fraction from existing contract (0 = none)","default":0.0},"is_preferred":{"type":"boolean","title":"Is Preferred","description":"C15: strategic preferred partner flag","default":false},"region_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Region Code","description":"ISO region code for C11 geographic diversity (e.g. 'PL', 'DE', 'CEE')"}},"type":"object","required":["supplier_id","name","unit_cost","lead_time_days","compliance_score","esg_score","max_capacity","served_regions"],"title":"SupplierInput","description":"Pre-selected supplier with its raw (non-normalised) parameters.\n\nFor auto-parts:\n  compliance_score → reliability/compliance index\n  esg_score        → ecological/ESG index\n\nFor IT services:\n  compliance_score → guaranteed SLA (%)  mapped to 0..1\n  esg_score        → historical reliability index"},"SupplierProfile":{"properties":{"supplier_id":{"type":"string","title":"Supplier Id"},"name":{"type":"string","title":"Name"},"nip":{"type":"string","title":"Nip","default":""},"vat_valid":{"type":"boolean","title":"Vat Valid","default":false},"address":{"type":"string","title":"Address","default":""},"country_code":{"type":"string","title":"Country Code","default":"PL"},"website":{"type":"string","title":"Website","default":""},"founded_year":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Founded Year"},"employee_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Employee Count"},"annual_revenue_pln":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Annual Revenue Pln"},"domains":{"items":{"type":"string"},"type":"array","title":"Domains"},"certificates":{"items":{"$ref":"#/components/schemas/SupplierCertificate"},"type":"array","title":"Certificates"},"contacts":{"items":{"$ref":"#/components/schemas/ContactPerson"},"type":"array","title":"Contacts"},"self_assessment":{"anyOf":[{"$ref":"#/components/schemas/SelfAssessmentResponse"},{"type":"null"}]},"optimizer_input":{"anyOf":[{"$ref":"#/components/schemas/SupplierInput"},{"type":"null"}]},"created_at":{"type":"string","title":"Created At","default":""},"updated_at":{"type":"string","title":"Updated At","default":""},"notes":{"type":"string","title":"Notes","default":""}},"type":"object","required":["supplier_id","name"],"title":"SupplierProfile"},"SupplierRadarProfile":{"properties":{"supplier_id":{"type":"string","title":"Supplier Id"},"supplier_name":{"type":"string","title":"Supplier Name"},"cost_norm":{"type":"number","title":"Cost Norm"},"time_norm":{"type":"number","title":"Time Norm"},"compliance_norm":{"type":"number","title":"Compliance Norm"},"esg_norm":{"type":"number","title":"Esg Norm"},"total_allocated_fraction":{"type":"number","title":"Total Allocated Fraction","description":"Total fraction of demand allocated to this supplier"}},"type":"object","required":["supplier_id","supplier_name","cost_norm","time_norm","compliance_norm","esg_norm","total_allocated_fraction"],"title":"SupplierRadarProfile","description":"Radar-chart data for a single supplier (normalised 0..1)."},"SupplierStability":{"properties":{"supplier_id":{"type":"string","title":"Supplier Id"},"supplier_name":{"type":"string","title":"Supplier Name"},"selection_rate":{"type":"number","title":"Selection Rate"}},"type":"object","required":["supplier_id","supplier_name","selection_rate"],"title":"SupplierStability"},"TransitionRequest":{"properties":{"new_status":{"type":"string","title":"New Status"},"actor":{"type":"string","title":"Actor","default":"buyer@flowproc.eu"},"note":{"type":"string","title":"Note","default":""}},"type":"object","required":["new_status"],"title":"TransitionRequest"},"TransitionStat":{"properties":{"source":{"type":"string","title":"Source"},"target":{"type":"string","title":"Target"},"count":{"type":"integer","title":"Count"},"avg_hours":{"type":"number","title":"Avg Hours"},"median_hours":{"type":"number","title":"Median Hours"},"p95_hours":{"type":"number","title":"P95 Hours"},"min_hours":{"type":"number","title":"Min Hours"},"max_hours":{"type":"number","title":"Max Hours"}},"type":"object","required":["source","target","count","avg_hours","median_hours","p95_hours","min_hours","max_hours"],"title":"TransitionStat","description":"Lead time statistics for one transition (activity → activity)."},"UpdateItemsRequest":{"properties":{"items":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Items"},"actor":{"type":"string","title":"Actor","default":"buyer@flowproc.eu"}},"type":"object","required":["items"],"title":"UpdateItemsRequest"},"UpdateTenantRequest":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"plan":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Plan"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"},"max_users":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Users"},"max_catalog_items":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Catalog Items"},"contact_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contact Email"},"features":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Features"}},"type":"object","title":"UpdateTenantRequest"},"UserCreateIn":{"properties":{"username":{"type":"string","title":"Username"},"password":{"type":"string","title":"Password"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"role":{"type":"string","title":"Role","default":"buyer"},"supplier_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Supplier Id"}},"type":"object","required":["username","password"],"title":"UserCreateIn"},"UserResetPasswordIn":{"properties":{"new_password":{"type":"string","title":"New Password"}},"type":"object","required":["new_password"],"title":"UserResetPasswordIn"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"VariableLog":{"properties":{"name":{"type":"string","title":"Name"},"value":{"type":"number","title":"Value"},"reduced_cost":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Reduced Cost"}},"type":"object","required":["name","value"],"title":"VariableLog"},"VariantInfo":{"properties":{"variant":{"type":"string","title":"Variant"},"frequency":{"type":"integer","title":"Frequency"},"percentage":{"type":"number","title":"Percentage"},"avg_duration_hours":{"type":"number","title":"Avg Duration Hours"},"min_duration_hours":{"type":"number","title":"Min Duration Hours"},"max_duration_hours":{"type":"number","title":"Max Duration Hours"},"case_ids":{"items":{"type":"string"},"type":"array","title":"Case Ids"}},"type":"object","required":["variant","frequency","percentage","avg_duration_hours","min_duration_hours","max_duration_hours","case_ids"],"title":"VariantInfo"},"VariantResponse":{"properties":{"variants":{"items":{"$ref":"#/components/schemas/VariantInfo"},"type":"array","title":"Variants"},"total_variants":{"type":"integer","title":"Total Variants"},"total_cases":{"type":"integer","title":"Total Cases"}},"type":"object","required":["variants","total_variants","total_cases"],"title":"VariantResponse","description":"Process variant analysis."},"ViesLookupRequest":{"properties":{"country_code":{"type":"string","maxLength":2,"title":"Country Code","default":"PL"},"vat_number":{"type":"string","maxLength":15,"minLength":5,"title":"Vat Number"}},"type":"object","required":["vat_number"],"title":"ViesLookupRequest"},"ViesLookupResponse":{"properties":{"valid":{"type":"boolean","title":"Valid","default":false},"name":{"type":"string","title":"Name","default":""},"address":{"type":"string","title":"Address","default":""},"country_code":{"type":"string","title":"Country Code","default":""},"vat_number":{"type":"string","title":"Vat Number","default":""},"request_date":{"type":"string","title":"Request Date","default":""}},"type":"object","title":"ViesLookupResponse"},"WebhookPayload":{"properties":{"event_type":{"type":"string","title":"Event Type","description":"rfq.created|rfq.updated|bid.received|rfq.closed"},"rfq_id":{"type":"string","title":"Rfq Id"},"timestamp":{"type":"string","title":"Timestamp","default":""},"payload":{"additionalProperties":true,"type":"object","title":"Payload"}},"type":"object","required":["event_type","rfq_id"],"title":"WebhookPayload"},"WebhookResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"event_type":{"type":"string","title":"Event Type"},"processed":{"type":"boolean","title":"Processed"},"message":{"type":"string","title":"Message","default":""}},"type":"object","required":["success","event_type","processed"],"title":"WebhookResponse"},"WhatIfRequest":{"properties":{"suppliers":{"items":{"$ref":"#/components/schemas/SupplierInput"},"type":"array","minItems":1,"title":"Suppliers"},"demand":{"items":{"$ref":"#/components/schemas/DemandItem"},"type":"array","minItems":1,"title":"Demand"},"scenarios":{"items":{"$ref":"#/components/schemas/ScenarioSpec"},"type":"array","maxItems":10,"minItems":2,"title":"Scenarios"}},"type":"object","required":["suppliers","demand","scenarios"],"title":"WhatIfRequest","description":"Request for what-if scenario comparison."},"WhatIfResponse":{"properties":{"scenarios":{"items":{"$ref":"#/components/schemas/ScenarioResultSchema"},"type":"array","title":"Scenarios"},"comparison":{"items":{"$ref":"#/components/schemas/ComparisonRow"},"type":"array","title":"Comparison"},"best_scenario":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Best Scenario"},"total_scenarios":{"type":"integer","title":"Total Scenarios"},"total_time_ms":{"type":"number","title":"Total Time Ms"}},"type":"object","required":["scenarios","comparison","total_scenarios","total_time_ms"],"title":"WhatIfResponse","description":"Response from what-if scenario engine."},"WorkflowStepIn":{"properties":{"id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Id"},"workflow_name":{"type":"string","title":"Workflow Name","default":"order_approval"},"step_order":{"type":"integer","title":"Step Order"},"condition_type":{"type":"string","title":"Condition Type"},"condition_value":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Condition Value"},"approver_role":{"type":"string","title":"Approver Role"},"sla_hours":{"type":"integer","title":"Sla Hours","default":24}},"type":"object","required":["step_order","condition_type","approver_role"],"title":"WorkflowStepIn"}},"securitySchemes":{"HTTPBearer":{"type":"http","scheme":"bearer"}}}}