{
  "components": {
    "responses": {
      "BadRequest": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ErreurMetier"
            }
          }
        },
        "description": "Corps illisible ou parametre invalide (ex. regle_parametre_invalide, champ_obligatoire)."
      },
      "Conflict": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ErreurMetier"
            }
          }
        },
        "description": "Doublon ou etat concurrent (doublon, lot_insuffisant...)."
      },
      "Forbidden": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ErreurMetier"
            }
          }
        },
        "description": "Droit insuffisant sur ce module ou cette action (droit_insuffisant, separation_taches...)."
      },
      "NotFound": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ErreurMetier"
            }
          }
        },
        "description": "Ressource introuvable, ou module hors du pack d'abonnement du locataire (jamais distingue, voir docs/PLAN_API_PUBLIQUE.md § invariant 2)."
      },
      "Unprocessable": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ErreurMetier"
            }
          }
        },
        "description": "Refus d'une regle metier posee sur cette ecriture (sur_reception, limite_credit_depassee, transition non autorisee...)."
      }
    },
    "schemas": {
      "AbsenceTypes": {
        "properties": {
          "category": {
            "type": "string"
          },
          "code": {
            "type": "string"
          },
          "color": {
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "is_active": {
            "type": "boolean"
          },
          "is_paid": {
            "type": "boolean"
          },
          "max_days_per_year": {
            "type": "integer"
          },
          "name": {
            "type": "string"
          },
          "requires_justification": {
            "type": "boolean"
          },
          "requires_medical_certificate": {
            "type": "boolean"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "code",
          "name"
        ],
        "type": "object"
      },
      "AccountingEntries": {
        "properties": {
          "account_id": {
            "format": "uuid",
            "type": "string"
          },
          "company_id": {
            "format": "uuid",
            "type": "string"
          },
          "cost_center": {
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "created_by": {
            "format": "uuid",
            "type": "string"
          },
          "credit": {
            "type": "number"
          },
          "debit": {
            "type": "number"
          },
          "description": {
            "type": "string"
          },
          "dim1_value_id": {
            "format": "uuid",
            "type": "string"
          },
          "dim2_value_id": {
            "format": "uuid",
            "type": "string"
          },
          "dim_set": {
            "type": "object"
          },
          "dimension_id": {
            "format": "uuid",
            "type": "string"
          },
          "document_id": {
            "format": "uuid",
            "type": "string"
          },
          "document_type": {
            "type": "string"
          },
          "entry_date": {
            "format": "date",
            "type": "string"
          },
          "entry_number": {
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "journal": {
            "type": "string"
          },
          "locked": {
            "type": "boolean"
          },
          "period": {
            "type": "string"
          },
          "reconciled": {
            "type": "boolean"
          },
          "reconciled_at": {
            "format": "date-time",
            "type": "string"
          },
          "reconciliation_code": {
            "type": "string"
          },
          "reference": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "account_id",
          "entry_date",
          "journal"
        ],
        "type": "object"
      },
      "Accounts": {
        "properties": {
          "active": {
            "type": "boolean"
          },
          "balance": {
            "type": "number"
          },
          "category": {
            "type": "string"
          },
          "code": {
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "is_active": {
            "type": "boolean"
          },
          "name": {
            "type": "string"
          },
          "parent_id": {
            "format": "uuid",
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "code",
          "name",
          "type"
        ],
        "type": "object"
      },
      "ActiveOperationsRealtime": {
        "properties": {
          "active_duration_minutes": {
            "type": "number"
          },
          "employee_name": {
            "type": "string"
          },
          "estimated_duration": {
            "type": "integer"
          },
          "is_delayed": {
            "type": "boolean"
          },
          "operation_id": {
            "format": "uuid",
            "type": "string"
          },
          "operation_name": {
            "type": "string"
          },
          "order_id": {
            "format": "uuid",
            "type": "string"
          },
          "order_number": {
            "type": "string"
          },
          "pause_duration": {
            "type": "integer"
          },
          "paused_at": {
            "format": "date-time",
            "type": "string"
          },
          "product_name": {
            "type": "string"
          },
          "progress_percentage": {
            "type": "number"
          },
          "realtime_status": {
            "type": "string"
          },
          "sequence": {
            "type": "integer"
          },
          "started_at": {
            "format": "date-time",
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "workstation_name": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "AffairItems": {
        "properties": {
          "affair_id": {
            "format": "uuid",
            "type": "string"
          },
          "article_id": {
            "format": "uuid",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "item_type": {
            "type": "string"
          },
          "quantity": {
            "type": "number"
          },
          "total_price": {
            "type": "number"
          },
          "unit_price": {
            "type": "number"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "type": "object"
      },
      "Affairs": {
        "properties": {
          "actual_cost": {
            "type": "number"
          },
          "affair_number": {
            "type": "string"
          },
          "budget": {
            "type": "number"
          },
          "chantier_id": {
            "format": "uuid",
            "type": "string"
          },
          "client_id": {
            "format": "uuid",
            "type": "string"
          },
          "client_name": {
            "type": "string"
          },
          "contact_id": {
            "format": "uuid",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "end_date": {
            "format": "date",
            "type": "string"
          },
          "execution_mode": {
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "margin": {
            "type": "number"
          },
          "margin_percent": {
            "type": "number"
          },
          "name": {
            "type": "string"
          },
          "notes": {
            "type": "string"
          },
          "progress": {
            "type": "number"
          },
          "project_id": {
            "format": "uuid",
            "type": "string"
          },
          "responsible_id": {
            "format": "uuid",
            "type": "string"
          },
          "responsible_name": {
            "type": "string"
          },
          "revenue": {
            "type": "number"
          },
          "start_date": {
            "format": "date",
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "type": "object"
      },
      "AiInteractions": {
        "properties": {
          "context_json": {
            "type": "object"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "entity_id": {
            "format": "uuid",
            "type": "string"
          },
          "entity_type": {
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "latency_ms": {
            "type": "integer"
          },
          "module": {
            "type": "string"
          },
          "page_path": {
            "type": "string"
          },
          "provider": {
            "type": "string"
          },
          "query": {
            "type": "string"
          },
          "response": {
            "type": "string"
          },
          "tokens_used": {
            "type": "integer"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "use_case": {
            "type": "string"
          },
          "user_id": {
            "format": "uuid",
            "type": "string"
          },
          "user_verdict": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "ArticleFamilies": {
        "properties": {
          "code": {
            "type": "string"
          },
          "color": {
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "is_active": {
            "type": "boolean"
          },
          "name": {
            "type": "string"
          },
          "parent_id": {
            "format": "uuid",
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "name"
        ],
        "type": "object"
      },
      "ArticleRequests": {
        "properties": {
          "approved_by": {
            "format": "uuid",
            "type": "string"
          },
          "article_id": {
            "format": "uuid",
            "type": "string"
          },
          "category": {
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "estimated_price": {
            "type": "number"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "rejection_reason": {
            "type": "string"
          },
          "requester_id": {
            "format": "uuid",
            "type": "string"
          },
          "specifications": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "unit": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "title"
        ],
        "type": "object"
      },
      "ArticleSuppliers": {
        "properties": {
          "article_id": {
            "format": "uuid",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "is_preferred": {
            "type": "boolean"
          },
          "lead_time_days": {
            "type": "integer"
          },
          "position": {
            "type": "integer"
          },
          "supplier_id": {
            "format": "uuid",
            "type": "string"
          },
          "supplier_reference": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "article_id",
          "supplier_id"
        ],
        "type": "object"
      },
      "Articles": {
        "properties": {
          "allow_negative_stock": {
            "type": "boolean"
          },
          "article_type": {
            "type": "string"
          },
          "barcode": {
            "type": "string"
          },
          "blocked": {
            "type": "string"
          },
          "buffer_profile_id": {
            "format": "uuid",
            "type": "string"
          },
          "code": {
            "type": "string"
          },
          "cost_price": {
            "type": "number"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "created_by": {
            "format": "uuid",
            "type": "string"
          },
          "current_stock": {
            "type": "number"
          },
          "decoupled_lead_time_days": {
            "type": "integer"
          },
          "deleted_at": {
            "format": "date-time",
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "designation": {
            "type": "string"
          },
          "discount_max": {
            "type": "number"
          },
          "family_id": {
            "format": "uuid",
            "type": "string"
          },
          "fodec": {
            "type": "number"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "image_url": {
            "type": "string"
          },
          "internal_notes": {
            "type": "string"
          },
          "is_active": {
            "type": "boolean"
          },
          "is_blocked": {
            "type": "boolean"
          },
          "is_purchasable": {
            "type": "boolean"
          },
          "is_sellable": {
            "type": "boolean"
          },
          "last_purchase_price": {
            "type": "number"
          },
          "lead_time": {
            "type": "integer"
          },
          "location": {
            "type": "string"
          },
          "margin_percent": {
            "type": "number"
          },
          "max_stock": {
            "type": "number"
          },
          "min_stock": {
            "type": "number"
          },
          "name": {
            "type": "string"
          },
          "planning_method": {
            "type": "string"
          },
          "pmp_price": {
            "type": "number"
          },
          "purchase_price": {
            "type": "number"
          },
          "purchase_unit_id": {
            "format": "uuid",
            "type": "string"
          },
          "quote_description": {
            "type": "string"
          },
          "quote_designation": {
            "type": "string"
          },
          "reference": {
            "type": "string"
          },
          "reorder_point": {
            "type": "number"
          },
          "reorder_qty": {
            "type": "number"
          },
          "sale_price": {
            "type": "number"
          },
          "sales_unit_id": {
            "format": "uuid",
            "type": "string"
          },
          "sector": {
            "type": "string"
          },
          "shelf_life_days": {
            "type": "integer"
          },
          "sku": {
            "type": "string"
          },
          "stock_method": {
            "type": "string"
          },
          "stock_quantity": {
            "type": "number"
          },
          "stock_unit_id": {
            "format": "uuid",
            "type": "string"
          },
          "stock_value": {
            "type": "number"
          },
          "subfamily2_id": {
            "format": "uuid",
            "type": "string"
          },
          "subfamily_id": {
            "format": "uuid",
            "type": "string"
          },
          "supplier_id": {
            "format": "uuid",
            "type": "string"
          },
          "supplier_reference": {
            "type": "string"
          },
          "tax_rate": {
            "type": "number"
          },
          "tax_rate_id": {
            "format": "uuid",
            "type": "string"
          },
          "track_inventory": {
            "type": "boolean"
          },
          "track_lots": {
            "type": "boolean"
          },
          "track_serial": {
            "type": "boolean"
          },
          "tracking_profile": {
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "unit_conversion_factor": {
            "type": "number"
          },
          "unit_id": {
            "format": "uuid",
            "type": "string"
          },
          "unit_price": {
            "type": "number"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "updated_by": {
            "format": "uuid",
            "type": "string"
          },
          "valuation_method": {
            "type": "string"
          },
          "version": {
            "type": "integer"
          },
          "weight": {
            "type": "number"
          },
          "weight_unit_id": {
            "format": "uuid",
            "type": "string"
          }
        },
        "type": "object"
      },
      "AssemblyGuides": {
        "properties": {
          "article_id": {
            "format": "uuid",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "created_by": {
            "format": "uuid",
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "flow_id": {
            "format": "uuid",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "product_id": {
            "format": "uuid",
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "version": {
            "type": "string"
          }
        },
        "required": [
          "name"
        ],
        "type": "object"
      },
      "AssemblySteps": {
        "properties": {
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "duration_minutes": {
            "type": "integer"
          },
          "estimated_time": {
            "type": "integer"
          },
          "guide_id": {
            "format": "uuid",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "image_url": {
            "type": "string"
          },
          "instructions": {
            "type": "string"
          },
          "safety_notes": {
            "type": "string"
          },
          "step_number": {
            "type": "integer"
          },
          "title": {
            "type": "string"
          },
          "tools_required": {
            "items": {},
            "type": "array"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "guide_id",
          "step_number"
        ],
        "type": "object"
      },
      "AssetCategories": {
        "properties": {
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "depreciation_method": {
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "useful_life_years": {
            "type": "integer"
          }
        },
        "required": [
          "name"
        ],
        "type": "object"
      },
      "AtpTimeline": {
        "properties": {
          "article_id": {
            "format": "uuid",
            "type": "string"
          },
          "event_date": {
            "format": "date",
            "type": "string"
          },
          "movement": {
            "type": "number"
          },
          "running_balance": {
            "type": "number"
          },
          "source_id": {
            "format": "uuid",
            "type": "string"
          },
          "source_reference": {
            "type": "string"
          },
          "source_type": {
            "type": "string"
          },
          "warehouse_id": {
            "format": "uuid",
            "type": "string"
          }
        },
        "type": "object"
      },
      "Attachments": {
        "properties": {
          "category": {
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "entity_id": {
            "format": "uuid",
            "type": "string"
          },
          "entity_type": {
            "type": "string"
          },
          "file_name": {
            "type": "string"
          },
          "file_size": {
            "type": "integer"
          },
          "file_url": {
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "mime_type": {
            "type": "string"
          },
          "ocr_metadata": {
            "type": "object"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "uploaded_by": {
            "format": "uuid",
            "type": "string"
          }
        },
        "required": [
          "entity_id",
          "entity_type",
          "file_url"
        ],
        "type": "object"
      },
      "AuditPlans": {
        "properties": {
          "audit_type": {
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "created_by": {
            "format": "uuid",
            "type": "string"
          },
          "deleted_at": {
            "format": "date-time",
            "type": "string"
          },
          "department": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "lead_auditor_id": {
            "format": "uuid",
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "planned_date": {
            "format": "date-time",
            "type": "string"
          },
          "scope": {
            "type": "string"
          },
          "standard": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "name"
        ],
        "type": "object"
      },
      "Audits": {
        "properties": {
          "actual_date": {
            "format": "date-time",
            "type": "string"
          },
          "audit_number": {
            "type": "string"
          },
          "audit_plan_id": {
            "format": "uuid",
            "type": "string"
          },
          "audit_type": {
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "created_by": {
            "format": "uuid",
            "type": "string"
          },
          "deleted_at": {
            "format": "date-time",
            "type": "string"
          },
          "findings_count": {
            "type": "integer"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "lead_auditor_id": {
            "format": "uuid",
            "type": "string"
          },
          "nc_count": {
            "type": "integer"
          },
          "scheduled_date": {
            "format": "date-time",
            "type": "string"
          },
          "scope": {
            "type": "string"
          },
          "score": {
            "type": "number"
          },
          "status": {
            "type": "string"
          },
          "summary": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "title"
        ],
        "type": "object"
      },
      "Audits5s": {
        "properties": {
          "action_plan": {
            "type": "string"
          },
          "area": {
            "type": "string"
          },
          "audit_date": {
            "format": "date",
            "type": "string"
          },
          "auditor": {
            "type": "string"
          },
          "auditor_id": {
            "format": "uuid",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "date": {
            "format": "date-time",
            "type": "string"
          },
          "deleted_at": {
            "format": "date-time",
            "type": "string"
          },
          "details": {
            "type": "object"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "observations": {
            "type": "string"
          },
          "seiketsu_score": {
            "type": "number"
          },
          "seiri_score": {
            "type": "number"
          },
          "seiso_score": {
            "type": "number"
          },
          "seiton_score": {
            "type": "number"
          },
          "set_in_order_score": {
            "type": "integer"
          },
          "shine_score": {
            "type": "integer"
          },
          "shitsuke_score": {
            "type": "number"
          },
          "sort_score": {
            "type": "integer"
          },
          "standardize_score": {
            "type": "integer"
          },
          "status": {
            "type": "string"
          },
          "sustain_score": {
            "type": "integer"
          },
          "total_score": {
            "type": "number"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "workstation_id": {
            "type": "string"
          },
          "workstation_name": {
            "type": "string"
          }
        },
        "required": [
          "area"
        ],
        "type": "object"
      },
      "BankStatementLines": {
        "properties": {
          "amount": {
            "type": "number"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "matched_entry_id": {
            "format": "uuid",
            "type": "string"
          },
          "matched_payment_id": {
            "format": "uuid",
            "type": "string"
          },
          "reconciled": {
            "type": "boolean"
          },
          "reference": {
            "type": "string"
          },
          "statement_id": {
            "format": "uuid",
            "type": "string"
          },
          "transaction_date": {
            "format": "date",
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "value_date": {
            "format": "date",
            "type": "string"
          }
        },
        "required": [
          "amount",
          "statement_id",
          "transaction_date",
          "type"
        ],
        "type": "object"
      },
      "BankStatements": {
        "properties": {
          "account_number": {
            "type": "string"
          },
          "bank_name": {
            "type": "string"
          },
          "closing_balance": {
            "type": "number"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "currency": {
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "imported_at": {
            "format": "date-time",
            "type": "string"
          },
          "opening_balance": {
            "type": "number"
          },
          "statement_date": {
            "format": "date",
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "bank_name",
          "statement_date"
        ],
        "type": "object"
      },
      "BillOfMaterials": {
        "properties": {
          "article_id": {
            "format": "uuid",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "created_by": {
            "format": "uuid",
            "type": "string"
          },
          "deleted_at": {
            "format": "date-time",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "is_active": {
            "type": "boolean"
          },
          "name": {
            "type": "string"
          },
          "notes": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "version": {
            "type": "string"
          },
          "yield_rate": {
            "type": "number"
          }
        },
        "required": [
          "name"
        ],
        "type": "object"
      },
      "BomCoProducts": {
        "properties": {
          "article_id": {
            "format": "uuid",
            "type": "string"
          },
          "bom_id": {
            "format": "uuid",
            "type": "string"
          },
          "cost_share_pct": {
            "type": "number"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "notes": {
            "type": "string"
          },
          "qty": {
            "type": "number"
          },
          "type": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "article_id",
          "bom_id"
        ],
        "type": "object"
      },
      "BomItems": {
        "properties": {
          "article_id": {
            "format": "uuid",
            "type": "string"
          },
          "bom_id": {
            "format": "uuid",
            "type": "string"
          },
          "child_bom_id": {
            "format": "uuid",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "is_critical": {
            "type": "boolean"
          },
          "notes": {
            "type": "string"
          },
          "position": {
            "type": "integer"
          },
          "quantity": {
            "type": "number"
          },
          "substitute_article_id": {
            "format": "uuid",
            "type": "string"
          },
          "unit": {
            "type": "string"
          },
          "unit_id": {
            "format": "uuid",
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "wastage_rate": {
            "type": "number"
          }
        },
        "required": [
          "bom_id"
        ],
        "type": "object"
      },
      "BomLines": {
        "properties": {
          "article_id": {
            "format": "uuid",
            "type": "string"
          },
          "bom_id": {
            "format": "uuid",
            "type": "string"
          },
          "component_id": {
            "format": "uuid",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "quantity": {
            "type": "number"
          },
          "scrap_rate": {
            "type": "number"
          },
          "unit": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "bom_id",
          "quantity"
        ],
        "type": "object"
      },
      "BomRecommendations": {
        "properties": {
          "bom_id": {
            "format": "uuid",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "generated_by": {
            "format": "uuid",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "payload": {
            "type": "object"
          },
          "priority": {
            "type": "string"
          },
          "recommendation": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "recommendation"
        ],
        "type": "object"
      },
      "BreakdownReports": {
        "properties": {
          "breakdown_type": {
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "local_id": {
            "type": "string"
          },
          "photos": {
            "type": "object"
          },
          "reported_by": {
            "format": "uuid",
            "type": "string"
          },
          "resolution_notes": {
            "type": "string"
          },
          "resolved_at": {
            "format": "date-time",
            "type": "string"
          },
          "resolved_by": {
            "format": "uuid",
            "type": "string"
          },
          "session_id": {
            "format": "uuid",
            "type": "string"
          },
          "severity": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "synced": {
            "type": "boolean"
          },
          "title": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "workstation_id": {
            "format": "uuid",
            "type": "string"
          },
          "workstation_stopped": {
            "type": "boolean"
          }
        },
        "required": [
          "breakdown_type",
          "reported_by",
          "title",
          "workstation_id"
        ],
        "type": "object"
      },
      "BudgetLines": {
        "properties": {
          "account_code": {
            "type": "string"
          },
          "account_id": {
            "format": "uuid",
            "type": "string"
          },
          "actual_amount": {
            "type": "number"
          },
          "apr": {
            "type": "number"
          },
          "aug": {
            "type": "number"
          },
          "budget_amount": {
            "type": "number"
          },
          "budget_period_id": {
            "format": "uuid",
            "type": "string"
          },
          "category": {
            "type": "string"
          },
          "cost_center": {
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "dec": {
            "type": "number"
          },
          "department": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "feb": {
            "type": "number"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "jan": {
            "type": "number"
          },
          "jul": {
            "type": "number"
          },
          "jun": {
            "type": "number"
          },
          "mar": {
            "type": "number"
          },
          "may": {
            "type": "number"
          },
          "notes": {
            "type": "string"
          },
          "nov": {
            "type": "number"
          },
          "oct": {
            "type": "number"
          },
          "period_id": {
            "format": "uuid",
            "type": "string"
          },
          "planned_amount": {
            "type": "number"
          },
          "sep": {
            "type": "number"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "variance": {
            "type": "number"
          }
        },
        "required": [
          "budget_period_id"
        ],
        "type": "object"
      },
      "BudgetPeriods": {
        "properties": {
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "end_date": {
            "format": "date",
            "type": "string"
          },
          "fiscal_year": {
            "type": "integer"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "start_date": {
            "format": "date",
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "end_date",
          "name",
          "start_date"
        ],
        "type": "object"
      },
      "BufferProfiles": {
        "properties": {
          "code": {
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "is_active": {
            "type": "boolean"
          },
          "lead_time_category": {
            "type": "string"
          },
          "lead_time_factor": {
            "type": "number"
          },
          "moq": {
            "type": "number"
          },
          "name": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "variability_category": {
            "type": "string"
          },
          "variability_factor": {
            "type": "number"
          }
        },
        "required": [
          "code",
          "lead_time_factor",
          "name",
          "variability_factor"
        ],
        "type": "object"
      },
      "Calibrations": {
        "properties": {
          "calibrated_by": {
            "type": "string"
          },
          "calibration_date": {
            "format": "date",
            "type": "string"
          },
          "certificate_number": {
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "deviation": {
            "type": "number"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "instrument_id": {
            "format": "uuid",
            "type": "string"
          },
          "next_due": {
            "format": "date",
            "type": "string"
          },
          "notes": {
            "type": "string"
          },
          "result": {
            "type": "string"
          },
          "uncertainty": {
            "type": "number"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "calibration_date",
          "instrument_id"
        ],
        "type": "object"
      },
      "CashDisbursements": {
        "properties": {
          "amount": {
            "type": "number"
          },
          "bank_account": {
            "type": "string"
          },
          "bank_reference": {
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "currency": {
            "type": "string"
          },
          "disbursement_date": {
            "format": "date",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "invoice_reference": {
            "type": "string"
          },
          "notes": {
            "type": "string"
          },
          "payment_method": {
            "type": "string"
          },
          "schedule_id": {
            "format": "uuid",
            "type": "string"
          },
          "supplier_id": {
            "format": "uuid",
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "amount",
          "disbursement_date"
        ],
        "type": "object"
      },
      "CashReceipts": {
        "properties": {
          "amount": {
            "type": "number"
          },
          "bank_account": {
            "type": "string"
          },
          "bank_reference": {
            "type": "string"
          },
          "client_id": {
            "format": "uuid",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "currency": {
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "invoice_id": {
            "format": "uuid",
            "type": "string"
          },
          "notes": {
            "type": "string"
          },
          "payment_method": {
            "type": "string"
          },
          "receipt_date": {
            "format": "date",
            "type": "string"
          },
          "schedule_id": {
            "format": "uuid",
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "amount",
          "receipt_date"
        ],
        "type": "object"
      },
      "ChatHistory": {
        "properties": {
          "content": {
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "metadata": {
            "type": "object"
          },
          "role": {
            "type": "string"
          },
          "session_id": {
            "format": "uuid",
            "type": "string"
          },
          "timestamp": {
            "format": "date-time",
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "user_id": {
            "format": "uuid",
            "type": "string"
          }
        },
        "required": [
          "content",
          "role"
        ],
        "type": "object"
      },
      "ClientCategories": {
        "properties": {
          "code": {
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "is_active": {
            "type": "boolean"
          },
          "name": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "code",
          "name"
        ],
        "type": "object"
      },
      "ClientCategoryArticlePrices": {
        "properties": {
          "article_id": {
            "format": "uuid",
            "type": "string"
          },
          "client_category_id": {
            "format": "uuid",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "end_date": {
            "format": "date",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "is_active": {
            "type": "boolean"
          },
          "price_type": {
            "type": "string"
          },
          "start_date": {
            "format": "date",
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "value": {
            "type": "number"
          }
        },
        "required": [
          "article_id",
          "client_category_id"
        ],
        "type": "object"
      },
      "ClientComplaints": {
        "properties": {
          "channel": {
            "type": "string"
          },
          "client_id": {
            "format": "uuid",
            "type": "string"
          },
          "complaint_number": {
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "created_by": {
            "format": "uuid",
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "resolution": {
            "type": "string"
          },
          "resolved_at": {
            "format": "date-time",
            "type": "string"
          },
          "severity": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "subject": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "subject"
        ],
        "type": "object"
      },
      "ClientContacts": {
        "properties": {
          "client_id": {
            "format": "uuid",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "email": {
            "type": "string"
          },
          "first_name": {
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "is_primary": {
            "type": "boolean"
          },
          "last_name": {
            "type": "string"
          },
          "phone": {
            "type": "string"
          },
          "position": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "client_id"
        ],
        "type": "object"
      },
      "ClientRelations": {
        "properties": {
          "client_id": {
            "format": "uuid",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "notes": {
            "type": "string"
          },
          "relation_type": {
            "type": "string"
          },
          "score": {
            "type": "integer"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "client_id"
        ],
        "type": "object"
      },
      "ClientReturnItems": {
        "properties": {
          "article_id": {
            "format": "uuid",
            "type": "string"
          },
          "client_return_id": {
            "format": "uuid",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "quantity": {
            "type": "number"
          },
          "reason": {
            "type": "string"
          },
          "total": {
            "type": "number"
          },
          "unit_price": {
            "type": "number"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "client_return_id",
          "quantity"
        ],
        "type": "object"
      },
      "ClientReturns": {
        "properties": {
          "client_id": {
            "format": "uuid",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "created_by": {
            "format": "uuid",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "invoice_id": {
            "format": "uuid",
            "type": "string"
          },
          "notes": {
            "type": "string"
          },
          "reason": {
            "type": "string"
          },
          "return_number": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "total": {
            "type": "number"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "warehouse_id": {
            "format": "uuid",
            "type": "string"
          }
        },
        "required": [
          "return_number"
        ],
        "type": "object"
      },
      "Clients": {
        "properties": {
          "activity_sector": {
            "type": "string"
          },
          "address": {
            "type": "string"
          },
          "bank_account": {
            "type": "string"
          },
          "bank_name": {
            "type": "string"
          },
          "blocked": {
            "type": "string"
          },
          "city": {
            "type": "string"
          },
          "client_category_id": {
            "format": "uuid",
            "type": "string"
          },
          "client_type": {
            "type": "string"
          },
          "code": {
            "type": "string"
          },
          "code_client": {
            "type": "string"
          },
          "commercial_agent": {
            "type": "string"
          },
          "commercial_rep": {
            "type": "string"
          },
          "contact_person": {
            "type": "string"
          },
          "contact_title": {
            "type": "string"
          },
          "country": {
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "created_by": {
            "format": "uuid",
            "type": "string"
          },
          "credit_limit": {
            "type": "number"
          },
          "currency": {
            "type": "string"
          },
          "customer_since": {
            "format": "date",
            "type": "string"
          },
          "deleted_at": {
            "format": "date-time",
            "type": "string"
          },
          "discount_default": {
            "type": "number"
          },
          "discount_rate": {
            "type": "number"
          },
          "email": {
            "type": "string"
          },
          "fax": {
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "internal_memo": {
            "type": "string"
          },
          "internal_notes": {
            "type": "string"
          },
          "is_active": {
            "type": "boolean"
          },
          "is_vip": {
            "type": "boolean"
          },
          "loyalty_points": {
            "type": "integer"
          },
          "matricule_fiscale": {
            "type": "string"
          },
          "mobile": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "notes": {
            "type": "string"
          },
          "payment_method": {
            "type": "string"
          },
          "payment_terms": {
            "type": "integer"
          },
          "phone": {
            "type": "string"
          },
          "portal_access_code": {
            "type": "string"
          },
          "postal_code": {
            "type": "string"
          },
          "price_category": {
            "type": "string"
          },
          "price_list": {
            "type": "string"
          },
          "registration_number": {
            "type": "string"
          },
          "rib": {
            "type": "string"
          },
          "send_newsletter": {
            "type": "boolean"
          },
          "tax_id": {
            "type": "string"
          },
          "tax_profile": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "updated_by": {
            "format": "uuid",
            "type": "string"
          },
          "website": {
            "type": "string"
          }
        },
        "required": [
          "name"
        ],
        "type": "object"
      },
      "CompanySettings": {
        "properties": {
          "category": {
            "type": "string"
          },
          "company_id": {
            "format": "uuid",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "key": {
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "value": {
            "type": "string"
          }
        },
        "required": [
          "key"
        ],
        "type": "object"
      },
      "Competencies": {
        "properties": {
          "category": {
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "deleted_at": {
            "format": "date-time",
            "type": "string"
          },
          "department": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "is_required": {
            "type": "boolean"
          },
          "level": {
            "type": "integer"
          },
          "name": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "category",
          "name"
        ],
        "type": "object"
      },
      "ComponentConsumptions": {
        "properties": {
          "article_id": {
            "format": "uuid",
            "type": "string"
          },
          "article_name": {
            "type": "string"
          },
          "confirmation_id": {
            "format": "uuid",
            "type": "string"
          },
          "consumed_at": {
            "format": "date-time",
            "type": "string"
          },
          "consumption_type": {
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "manufacturing_order_id": {
            "format": "uuid",
            "type": "string"
          },
          "mo_line_id": {
            "format": "uuid",
            "type": "string"
          },
          "operation_id": {
            "format": "uuid",
            "type": "string"
          },
          "quantity_consumed": {
            "type": "number"
          },
          "total_cost": {
            "type": "number"
          },
          "unit_cost": {
            "type": "number"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "article_id",
          "manufacturing_order_id"
        ],
        "type": "object"
      },
      "CorrectiveActions": {
        "properties": {
          "action_number": {
            "type": "string"
          },
          "action_plan": {
            "type": "string"
          },
          "action_type": {
            "type": "string"
          },
          "ai_suggestions": {
            "type": "object"
          },
          "assigned_to": {
            "format": "uuid",
            "type": "string"
          },
          "audit_id": {
            "format": "uuid",
            "type": "string"
          },
          "completed_at": {
            "format": "date-time",
            "type": "string"
          },
          "completion_date": {
            "format": "date-time",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "created_by": {
            "format": "uuid",
            "type": "string"
          },
          "deleted_at": {
            "format": "date-time",
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "due_date": {
            "format": "date-time",
            "type": "string"
          },
          "effectiveness": {
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "non_conformity_id": {
            "format": "uuid",
            "type": "string"
          },
          "notes": {
            "type": "string"
          },
          "priority": {
            "type": "string"
          },
          "responsible_name": {
            "type": "string"
          },
          "root_cause": {
            "type": "string"
          },
          "root_cause_category": {
            "type": "string"
          },
          "source_id": {
            "format": "uuid",
            "type": "string"
          },
          "source_type": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "verification_result": {
            "type": "string"
          },
          "verified_at": {
            "format": "date-time",
            "type": "string"
          },
          "verified_by": {
            "format": "uuid",
            "type": "string"
          }
        },
        "required": [
          "title"
        ],
        "type": "object"
      },
      "CreditNoteItems": {
        "properties": {
          "article_id": {
            "format": "uuid",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "credit_note_id": {
            "format": "uuid",
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "dim1_value_id": {
            "format": "uuid",
            "type": "string"
          },
          "dim2_value_id": {
            "format": "uuid",
            "type": "string"
          },
          "dim_set": {
            "type": "object"
          },
          "discount_2": {
            "type": "number"
          },
          "discount_2_type": {
            "type": "string"
          },
          "discount_percent": {
            "type": "number"
          },
          "fodec_rate": {
            "type": "number"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "line_total": {
            "type": "number"
          },
          "quantity": {
            "type": "number"
          },
          "tax_rate": {
            "type": "number"
          },
          "unit_price": {
            "type": "number"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "credit_note_id",
          "quantity",
          "unit_price"
        ],
        "type": "object"
      },
      "CreditNotes": {
        "properties": {
          "archived_at": {
            "format": "date-time",
            "type": "string"
          },
          "archived_by": {
            "format": "uuid",
            "type": "string"
          },
          "client_id": {
            "format": "uuid",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "created_by": {
            "format": "uuid",
            "type": "string"
          },
          "credit_note_number": {
            "type": "string"
          },
          "credit_number": {
            "type": "string"
          },
          "deleted_at": {
            "format": "date-time",
            "type": "string"
          },
          "dim1_value_id": {
            "format": "uuid",
            "type": "string"
          },
          "dim2_value_id": {
            "format": "uuid",
            "type": "string"
          },
          "dim_set": {
            "type": "object"
          },
          "fodec_amount": {
            "type": "number"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "invoice_id": {
            "format": "uuid",
            "type": "string"
          },
          "issue_date": {
            "format": "date",
            "type": "string"
          },
          "operation_type": {
            "type": "string"
          },
          "reason": {
            "type": "string"
          },
          "stamp_duty": {
            "type": "number"
          },
          "status": {
            "type": "string"
          },
          "subtotal": {
            "type": "number"
          },
          "supplier_id": {
            "format": "uuid",
            "type": "string"
          },
          "tax_amount": {
            "type": "number"
          },
          "tax_total": {
            "type": "number"
          },
          "terms": {
            "type": "string"
          },
          "total": {
            "type": "number"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "warehouse_id": {
            "format": "uuid",
            "type": "string"
          }
        },
        "required": [
          "credit_number"
        ],
        "type": "object"
      },
      "CrmInteractions": {
        "properties": {
          "client_id": {
            "format": "uuid",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "created_by": {
            "format": "uuid",
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "direction": {
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "interaction_date": {
            "format": "date-time",
            "type": "string"
          },
          "interaction_type": {
            "type": "string"
          },
          "next_action": {
            "type": "string"
          },
          "next_action_date": {
            "format": "date",
            "type": "string"
          },
          "opportunity_id": {
            "format": "uuid",
            "type": "string"
          },
          "recipient_email": {
            "type": "string"
          },
          "subject": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "interaction_type"
        ],
        "type": "object"
      },
      "CrmTasks": {
        "properties": {
          "assigned_to": {
            "format": "uuid",
            "type": "string"
          },
          "client_id": {
            "format": "uuid",
            "type": "string"
          },
          "completed_at": {
            "format": "date-time",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "created_by": {
            "format": "uuid",
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "due_date": {
            "format": "date-time",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "opportunity_id": {
            "format": "uuid",
            "type": "string"
          },
          "priority": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "title"
        ],
        "type": "object"
      },
      "Currencies": {
        "properties": {
          "active": {
            "type": "boolean"
          },
          "code": {
            "type": "string"
          },
          "decimal_places": {
            "type": "integer"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "is_default": {
            "type": "boolean"
          },
          "name": {
            "type": "string"
          },
          "symbol": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "code",
          "name"
        ],
        "type": "object"
      },
      "DeliveryNoteItems": {
        "properties": {
          "article_id": {
            "format": "uuid",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "delivery_note_id": {
            "format": "uuid",
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "dim1_value_id": {
            "format": "uuid",
            "type": "string"
          },
          "dim2_value_id": {
            "format": "uuid",
            "type": "string"
          },
          "dim_set": {
            "type": "object"
          },
          "discount": {
            "type": "number"
          },
          "discount_2": {
            "type": "number"
          },
          "discount_2_type": {
            "type": "string"
          },
          "discount_type": {
            "type": "string"
          },
          "fodec_rate": {
            "type": "number"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "line_total": {
            "type": "number"
          },
          "lot_number": {
            "type": "string"
          },
          "quantity": {
            "type": "number"
          },
          "quantity_delivered": {
            "type": "number"
          },
          "sales_order_item_id": {
            "format": "uuid",
            "type": "string"
          },
          "sort_order": {
            "type": "integer"
          },
          "tax_rate": {
            "type": "number"
          },
          "unit_price": {
            "type": "number"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "delivery_note_id",
          "quantity_delivered"
        ],
        "type": "object"
      },
      "DeliveryNotes": {
        "properties": {
          "actual_delivery": {
            "format": "date",
            "type": "string"
          },
          "archived_at": {
            "format": "date-time",
            "type": "string"
          },
          "archived_by": {
            "format": "uuid",
            "type": "string"
          },
          "carrier": {
            "type": "string"
          },
          "client_id": {
            "format": "uuid",
            "type": "string"
          },
          "contact_id": {
            "format": "uuid",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "created_by": {
            "format": "uuid",
            "type": "string"
          },
          "deleted_at": {
            "format": "date-time",
            "type": "string"
          },
          "delivery_date": {
            "format": "date",
            "type": "string"
          },
          "delivery_number": {
            "type": "string"
          },
          "dim1_value_id": {
            "format": "uuid",
            "type": "string"
          },
          "dim2_value_id": {
            "format": "uuid",
            "type": "string"
          },
          "dim_set": {
            "type": "object"
          },
          "due_date": {
            "format": "date",
            "type": "string"
          },
          "fodec_amount": {
            "type": "number"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "notes": {
            "type": "string"
          },
          "operation_type": {
            "type": "string"
          },
          "sales_order_id": {
            "format": "uuid",
            "type": "string"
          },
          "shipping_address": {
            "type": "string"
          },
          "shipping_city": {
            "type": "string"
          },
          "shipping_cost": {
            "type": "number"
          },
          "shipping_country": {
            "type": "string"
          },
          "shipping_method": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "subtotal": {
            "type": "number"
          },
          "tax_amount": {
            "type": "number"
          },
          "total": {
            "type": "number"
          },
          "total_packages": {
            "type": "integer"
          },
          "total_weight": {
            "type": "number"
          },
          "tracking_number": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "warehouse_id": {
            "format": "uuid",
            "type": "string"
          }
        },
        "required": [
          "delivery_number"
        ],
        "type": "object"
      },
      "Departments": {
        "properties": {
          "code": {
            "type": "string"
          },
          "color": {
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "is_active": {
            "type": "boolean"
          },
          "manager_id": {
            "format": "uuid",
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "name"
        ],
        "type": "object"
      },
      "DepreciationEntries": {
        "properties": {
          "accumulated": {
            "type": "number"
          },
          "amount": {
            "type": "number"
          },
          "asset_id": {
            "format": "uuid",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "period": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "amount",
          "asset_id",
          "period"
        ],
        "type": "object"
      },
      "DimDefaults": {
        "properties": {
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "dimension_id": {
            "format": "uuid",
            "type": "string"
          },
          "entity_id": {
            "format": "uuid",
            "type": "string"
          },
          "entity_table": {
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "posting": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "value_id": {
            "format": "uuid",
            "type": "string"
          }
        },
        "required": [
          "dimension_id",
          "entity_table"
        ],
        "type": "object"
      },
      "DimDimensions": {
        "properties": {
          "blocked": {
            "type": "boolean"
          },
          "code": {
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "position": {
            "type": "integer"
          },
          "source_table": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "code",
          "name"
        ],
        "type": "object"
      },
      "DimForbidden": {
        "properties": {
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "dimension_a": {
            "format": "uuid",
            "type": "string"
          },
          "dimension_b": {
            "format": "uuid",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "value_a": {
            "format": "uuid",
            "type": "string"
          },
          "value_b": {
            "format": "uuid",
            "type": "string"
          }
        },
        "required": [
          "dimension_a",
          "dimension_b"
        ],
        "type": "object"
      },
      "DimValues": {
        "properties": {
          "blocked": {
            "type": "boolean"
          },
          "code": {
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "dimension_id": {
            "format": "uuid",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "source_id": {
            "format": "uuid",
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "code",
          "dimension_id",
          "name"
        ],
        "type": "object"
      },
      "Dimensions": {
        "properties": {
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "dimension_key": {
            "type": "string"
          },
          "dimension_value": {
            "type": "string"
          },
          "entity_id": {
            "format": "uuid",
            "type": "string"
          },
          "entity_type": {
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "type": "object"
      },
      "DiscountRules": {
        "properties": {
          "active": {
            "type": "boolean"
          },
          "article_id": {
            "format": "uuid",
            "type": "string"
          },
          "client_id": {
            "format": "uuid",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "end_date": {
            "format": "date",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "min_amount": {
            "type": "number"
          },
          "min_quantity": {
            "type": "number"
          },
          "name": {
            "type": "string"
          },
          "start_date": {
            "format": "date",
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "value": {
            "type": "number"
          }
        },
        "required": [
          "name",
          "value"
        ],
        "type": "object"
      },
      "DocumentControl": {
        "properties": {
          "approved_at": {
            "format": "date-time",
            "type": "string"
          },
          "approver_id": {
            "format": "uuid",
            "type": "string"
          },
          "article_id": {
            "format": "uuid",
            "type": "string"
          },
          "author_id": {
            "format": "uuid",
            "type": "string"
          },
          "category": {
            "type": "string"
          },
          "content_url": {
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "deleted_at": {
            "format": "date-time",
            "type": "string"
          },
          "document_number": {
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "next_review": {
            "format": "date-time",
            "type": "string"
          },
          "review_date": {
            "format": "date-time",
            "type": "string"
          },
          "reviewer_id": {
            "format": "uuid",
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "tags": {
            "items": {},
            "type": "array"
          },
          "title": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "version": {
            "type": "string"
          }
        },
        "required": [
          "document_number",
          "title"
        ],
        "type": "object"
      },
      "Documents": {
        "properties": {
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "entity_id": {
            "format": "uuid",
            "type": "string"
          },
          "entity_type": {
            "type": "string"
          },
          "file_size": {
            "type": "integer"
          },
          "file_url": {
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "mime_type": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "uploaded_by": {
            "format": "uuid",
            "type": "string"
          },
          "version": {
            "type": "string"
          }
        },
        "required": [
          "name"
        ],
        "type": "object"
      },
      "DunningHistory": {
        "properties": {
          "client_id": {
            "format": "uuid",
            "type": "string"
          },
          "dunning_level_id": {
            "format": "uuid",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "invoice_id": {
            "format": "uuid",
            "type": "string"
          },
          "notes": {
            "type": "string"
          },
          "sent_at": {
            "format": "date-time",
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "type": "object"
      },
      "DunningLevels": {
        "properties": {
          "active": {
            "type": "boolean"
          },
          "days_overdue": {
            "type": "integer"
          },
          "fee_amount": {
            "type": "number"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "level": {
            "type": "integer"
          },
          "name": {
            "type": "string"
          },
          "template": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "days_overdue",
          "level",
          "name"
        ],
        "type": "object"
      },
      "EInvoices": {
        "properties": {
          "accepted_at": {
            "format": "date-time",
            "type": "string"
          },
          "archive_date": {
            "format": "date-time",
            "type": "string"
          },
          "archive_id": {
            "format": "uuid",
            "type": "string"
          },
          "buyer": {
            "type": "object"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "currency": {
            "type": "string"
          },
          "digital_signature": {
            "type": "string"
          },
          "fiscal_stamp": {
            "type": "number"
          },
          "format": {
            "type": "string"
          },
          "hash": {
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "invoice_id": {
            "format": "uuid",
            "type": "string"
          },
          "invoice_number": {
            "type": "string"
          },
          "invoice_type_code": {
            "type": "string"
          },
          "json_content": {
            "type": "object"
          },
          "lines": {
            "type": "object"
          },
          "qr_code_data": {
            "type": "string"
          },
          "rejection_reason": {
            "type": "string"
          },
          "retention_until": {
            "format": "date",
            "type": "string"
          },
          "seller": {
            "type": "object"
          },
          "sent_at": {
            "format": "date-time",
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "subtotal": {
            "type": "number"
          },
          "tax_amount": {
            "type": "number"
          },
          "total": {
            "type": "number"
          },
          "ttn_receipt_id": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "xml_content": {
            "type": "string"
          }
        },
        "required": [
          "buyer",
          "invoice_id",
          "invoice_number",
          "seller",
          "subtotal",
          "tax_amount",
          "total"
        ],
        "type": "object"
      },
      "EdiMessages": {
        "properties": {
          "content": {
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "direction": {
            "type": "string"
          },
          "document_ref": {
            "type": "string"
          },
          "error_message": {
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "message_number": {
            "type": "string"
          },
          "message_type": {
            "type": "string"
          },
          "partner_id": {
            "format": "uuid",
            "type": "string"
          },
          "processed_at": {
            "format": "date-time",
            "type": "string"
          },
          "sent_at": {
            "format": "date-time",
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "direction"
        ],
        "type": "object"
      },
      "EdiPartners": {
        "properties": {
          "active": {
            "type": "boolean"
          },
          "api_key": {
            "type": "string"
          },
          "auth_type": {
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "document_types": {
            "type": "object"
          },
          "endpoint_url": {
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "partner_code": {
            "type": "string"
          },
          "partner_type": {
            "type": "string"
          },
          "protocol": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "name"
        ],
        "type": "object"
      },
      "EmailTracking": {
        "properties": {
          "acs_message_id": {
            "type": "string"
          },
          "bounce_type": {
            "type": "string"
          },
          "campaign_id": {
            "format": "uuid",
            "type": "string"
          },
          "click_count": {
            "type": "integer"
          },
          "clicked_at": {
            "format": "date-time",
            "type": "string"
          },
          "clicked_url": {
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "entity_id": {
            "format": "uuid",
            "type": "string"
          },
          "entity_type": {
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "interaction_id": {
            "format": "uuid",
            "type": "string"
          },
          "ip_address": {
            "type": "string"
          },
          "open_count": {
            "type": "integer"
          },
          "opened_at": {
            "format": "date-time",
            "type": "string"
          },
          "recipient": {
            "type": "string"
          },
          "recipient_email": {
            "type": "string"
          },
          "sent_at": {
            "format": "date-time",
            "type": "string"
          },
          "source": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "subject": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "user_agent": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "EmailUnsubscribes": {
        "properties": {
          "client_id": {
            "format": "uuid",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "email": {
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "reason": {
            "type": "string"
          },
          "source": {
            "type": "string"
          },
          "tracking_id": {
            "format": "uuid",
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "email"
        ],
        "type": "object"
      },
      "EmployeeDailyReports": {
        "properties": {
          "affair_refs": {
            "type": "string"
          },
          "author_name": {
            "type": "string"
          },
          "blockers": {
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "department": {
            "type": "string"
          },
          "employee_id": {
            "format": "uuid",
            "type": "string"
          },
          "hours_worked": {
            "type": "number"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "lean_tags": {
            "items": {},
            "type": "array"
          },
          "linked_affairs": {
            "type": "object"
          },
          "linked_das": {
            "type": "object"
          },
          "linked_mos": {
            "type": "object"
          },
          "report_date": {
            "format": "date",
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "submitted_at": {
            "format": "date-time",
            "type": "string"
          },
          "summary": {
            "type": "string"
          },
          "tasks_completed": {
            "type": "string"
          },
          "tasks_planned": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "user_id": {
            "format": "uuid",
            "type": "string"
          }
        },
        "required": [
          "report_date",
          "user_id"
        ],
        "type": "object"
      },
      "EmployeePlannedTasks": {
        "properties": {
          "affair_refs": {
            "type": "string"
          },
          "ai_rationale": {
            "type": "string"
          },
          "assignee_name": {
            "type": "string"
          },
          "completed_at": {
            "format": "date-time",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "daily_report_id": {
            "format": "uuid",
            "type": "string"
          },
          "department": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "employee_id": {
            "format": "uuid",
            "type": "string"
          },
          "estimated_hours": {
            "type": "number"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "methodology_tags": {
            "items": {},
            "type": "array"
          },
          "planned_date": {
            "format": "date",
            "type": "string"
          },
          "position": {
            "type": "integer"
          },
          "priority": {
            "type": "string"
          },
          "source": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "user_id": {
            "format": "uuid",
            "type": "string"
          }
        },
        "required": [
          "planned_date",
          "title",
          "user_id"
        ],
        "type": "object"
      },
      "Employees": {
        "properties": {
          "address": {
            "type": "string"
          },
          "annual_leave_balance": {
            "type": "number"
          },
          "bank_account": {
            "type": "string"
          },
          "bank_name": {
            "type": "string"
          },
          "birth_date": {
            "format": "date",
            "type": "string"
          },
          "blood_type": {
            "type": "string"
          },
          "cin": {
            "type": "string"
          },
          "city": {
            "type": "string"
          },
          "cnss_number": {
            "type": "string"
          },
          "contract_type": {
            "type": "string"
          },
          "country": {
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "created_by": {
            "format": "uuid",
            "type": "string"
          },
          "deleted_at": {
            "format": "date-time",
            "type": "string"
          },
          "department": {
            "type": "string"
          },
          "dependents": {
            "type": "integer"
          },
          "diploma": {
            "type": "string"
          },
          "email": {
            "type": "string"
          },
          "emergency_contact": {
            "type": "string"
          },
          "emergency_phone": {
            "type": "string"
          },
          "emergency_relation": {
            "type": "string"
          },
          "employee_number": {
            "type": "string"
          },
          "end_date": {
            "format": "date",
            "type": "string"
          },
          "first_name": {
            "type": "string"
          },
          "gender": {
            "type": "string"
          },
          "gross_salary": {
            "type": "number"
          },
          "hire_date": {
            "format": "date",
            "type": "string"
          },
          "hourly_rate": {
            "type": "number"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "internal_memo": {
            "type": "string"
          },
          "is_active": {
            "type": "boolean"
          },
          "last_name": {
            "type": "string"
          },
          "leave_group": {
            "type": "string"
          },
          "manager": {
            "type": "string"
          },
          "marital_status": {
            "type": "string"
          },
          "nationality": {
            "type": "string"
          },
          "notes": {
            "type": "string"
          },
          "passport": {
            "type": "string"
          },
          "phone": {
            "type": "string"
          },
          "position": {
            "type": "string"
          },
          "postal_code": {
            "type": "string"
          },
          "qualification": {
            "type": "string"
          },
          "salary_mode": {
            "type": "string"
          },
          "sick_leave_balance": {
            "type": "number"
          },
          "tax_id": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "updated_by": {
            "format": "uuid",
            "type": "string"
          },
          "user_id": {
            "format": "uuid",
            "type": "string"
          },
          "work_schedule": {
            "type": "string"
          }
        },
        "required": [
          "first_name",
          "last_name"
        ],
        "type": "object"
      },
      "EmploymentContracts": {
        "properties": {
          "contract_number": {
            "type": "string"
          },
          "contract_type": {
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "currency": {
            "type": "string"
          },
          "department": {
            "type": "string"
          },
          "document_url": {
            "type": "string"
          },
          "employee_id": {
            "format": "uuid",
            "type": "string"
          },
          "end_date": {
            "format": "date",
            "type": "string"
          },
          "hours_per_week": {
            "type": "number"
          },
          "housing_allowance": {
            "type": "number"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "leave_days_per_year": {
            "type": "number"
          },
          "meal_allowance": {
            "type": "number"
          },
          "notes": {
            "type": "string"
          },
          "notice_period_days": {
            "type": "integer"
          },
          "other_allowances": {
            "type": "number"
          },
          "position": {
            "type": "string"
          },
          "salary": {
            "type": "number"
          },
          "start_date": {
            "format": "date",
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "transport_allowance": {
            "type": "number"
          },
          "trial_end_date": {
            "format": "date",
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "contract_type",
          "employee_id",
          "start_date"
        ],
        "type": "object"
      },
      "Equipment": {
        "properties": {
          "category": {
            "type": "string"
          },
          "code": {
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "criticality": {
            "type": "string"
          },
          "deleted_at": {
            "format": "date-time",
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "image_url": {
            "type": "string"
          },
          "installation_date": {
            "format": "date",
            "type": "string"
          },
          "is_active": {
            "type": "boolean"
          },
          "last_maintenance_date": {
            "format": "date",
            "type": "string"
          },
          "location": {
            "type": "string"
          },
          "manual_url": {
            "type": "string"
          },
          "manufacturer": {
            "type": "string"
          },
          "model": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "next_maintenance_date": {
            "format": "date",
            "type": "string"
          },
          "notes": {
            "type": "string"
          },
          "parent_id": {
            "format": "uuid",
            "type": "string"
          },
          "serial_number": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "technical_location_id": {
            "format": "uuid",
            "type": "string"
          },
          "total_breakdowns": {
            "type": "integer"
          },
          "total_downtime_hours": {
            "type": "number"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "warranty_expiry": {
            "format": "date",
            "type": "string"
          }
        },
        "required": [
          "name"
        ],
        "type": "object"
      },
      "EquipmentSerialHistory": {
        "properties": {
          "changed_at": {
            "format": "date-time",
            "type": "string"
          },
          "changed_by": {
            "format": "uuid",
            "type": "string"
          },
          "changed_by_name": {
            "type": "string"
          },
          "equipment_id": {
            "format": "uuid",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "notes": {
            "type": "string"
          },
          "serial_number": {
            "type": "string"
          },
          "source": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "equipment_id",
          "serial_number"
        ],
        "type": "object"
      },
      "ErreurMetier": {
        "description": "Refus metier stable (pkg/erreurs.ErreurMetier) — le portail traduit `code`, jamais `message`.",
        "properties": {
          "code": {
            "description": "Code stable, snake_case. Voir l'enumeration ci-dessous — pkg/erreurs/codes.go reste la source.",
            "enum": [
              "acces_portail_requis",
              "approbation_requise",
              "archivage_requis",
              "blocage_invalide",
              "bon_sans_ligne",
              "certificat_expire",
              "champ_obligatoire",
              "champ_requis_statut",
              "cible_webhook_interne",
              "cle_api_invalide",
              "cle_api_origine_navigateur",
              "code_acces_invalide",
              "combinaison_interdite",
              "compte_desactive",
              "contenu_reserve_workflow",
              "corps_illisible",
              "delegue_invalide",
              "dimension_miroir_lecture_seule",
              "dimension_requise",
              "document_fige",
              "document_introuvable",
              "document_requis",
              "doublon",
              "droit_insuffisant",
              "echec_numerotation",
              "echec_technique",
              "equipement_non_etalonne",
              "evenement_webhook_inconnu",
              "expiration_cle_invalide",
              "fournisseur_non_evalue",
              "habilitation_requise",
              "ligne_incoherente",
              "ligne_sans_prix",
              "ligne_sans_quantite",
              "limite_credit_depassee",
              "livraison_webhook_introuvable",
              "lot_insuffisant",
              "marketplace_pack_introuvable",
              "masque_numerotation_invalide",
              "mode_invalide",
              "nc_sans_action",
              "numero_manuel_doublon",
              "numero_manuel_non_autorise",
              "numero_manuel_requis",
              "operation_non_autorisee_statut",
              "pack_format_invalide",
              "pack_inconnu",
              "pack_signature_invalide",
              "periode_close",
              "portail_non_active",
              "promesse_sans_atp",
              "referentiel_bloque",
              "regle_parametre_invalide",
              "regle_type_inconnu",
              "scope_insuffisant",
              "scope_invalide",
              "separation_taches",
              "serie_numerotation_epuisee",
              "session_expiree",
              "simulation_indisponible",
              "statut_transition_invalide",
              "stockage_non_configure",
              "sur_reception",
              "totaux_incoherents",
              "tracabilite_requise",
              "transition_non_autorisee_profil",
              "trop_de_tentatives",
              "url_webhook_invalide",
              "vue_lecture_seule",
              "workflow_requis"
            ],
            "type": "string"
          },
          "message": {
            "description": "Message francais de repli tant que le portail ne traduit pas encore ce code.",
            "type": "string"
          },
          "params": {
            "description": "Detail du refus (numero de ligne, identifiant...). Varie par code, peut etre absent.",
            "nullable": true,
            "type": "object"
          }
        },
        "required": [
          "code",
          "message"
        ],
        "type": "object"
      },
      "EventLogs": {
        "properties": {
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "data": {
            "type": "object"
          },
          "entity_id": {
            "format": "uuid",
            "type": "string"
          },
          "entity_type": {
            "type": "string"
          },
          "event_type": {
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "user_id": {
            "format": "uuid",
            "type": "string"
          }
        },
        "required": [
          "event_type"
        ],
        "type": "object"
      },
      "ExchangeRates": {
        "properties": {
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "effective_date": {
            "format": "date",
            "type": "string"
          },
          "from_currency": {
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "inverse_rate": {
            "type": "number"
          },
          "rate": {
            "type": "number"
          },
          "source": {
            "type": "string"
          },
          "to_currency": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "effective_date",
          "from_currency",
          "rate",
          "to_currency"
        ],
        "type": "object"
      },
      "ExpenseReportLines": {
        "properties": {
          "amount": {
            "type": "number"
          },
          "category": {
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "currency": {
            "type": "string"
          },
          "date": {
            "format": "date",
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "notes": {
            "type": "string"
          },
          "receipt_url": {
            "type": "string"
          },
          "report_id": {
            "format": "uuid",
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "type": "object"
      },
      "ExpenseReports": {
        "properties": {
          "approval_date": {
            "format": "date-time",
            "type": "string"
          },
          "approver_id": {
            "format": "uuid",
            "type": "string"
          },
          "approver_name": {
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "currency": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "employee_id": {
            "format": "uuid",
            "type": "string"
          },
          "employee_name": {
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "notes": {
            "type": "string"
          },
          "payment_date": {
            "format": "date-time",
            "type": "string"
          },
          "rejection_reason": {
            "type": "string"
          },
          "report_number": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "submission_date": {
            "format": "date-time",
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "total_amount": {
            "type": "number"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "type": "object"
      },
      "FieldChanges": {
        "properties": {
          "changed_at": {
            "format": "date-time",
            "type": "string"
          },
          "changed_by": {
            "format": "uuid",
            "type": "string"
          },
          "column_name": {
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "new_value": {
            "type": "string"
          },
          "old_value": {
            "type": "string"
          },
          "record_id": {
            "type": "string"
          },
          "table_name": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "column_name",
          "record_id",
          "table_name"
        ],
        "type": "object"
      },
      "FiscalPeriods": {
        "properties": {
          "closed_at": {
            "format": "date-time",
            "type": "string"
          },
          "closed_by": {
            "format": "uuid",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "fiscal_year": {
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "month": {
            "type": "integer"
          },
          "notes": {
            "type": "string"
          },
          "period": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "fiscal_year",
          "month",
          "period"
        ],
        "type": "object"
      },
      "FiscalYears": {
        "properties": {
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "end_date": {
            "format": "date",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "is_closed": {
            "type": "boolean"
          },
          "start_date": {
            "format": "date",
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "year": {
            "type": "integer"
          }
        },
        "required": [
          "end_date",
          "start_date",
          "year"
        ],
        "type": "object"
      },
      "FixedAssets": {
        "properties": {
          "accumulated_depreciation": {
            "type": "number"
          },
          "acquisition_cost": {
            "type": "number"
          },
          "acquisition_date": {
            "format": "date",
            "type": "string"
          },
          "category_id": {
            "format": "uuid",
            "type": "string"
          },
          "code": {
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "current_value": {
            "type": "number"
          },
          "depreciation_method": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "location": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "net_book_value": {
            "type": "number"
          },
          "notes": {
            "type": "string"
          },
          "residual_value": {
            "type": "number"
          },
          "serial_number": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "useful_life_months": {
            "type": "integer"
          }
        },
        "required": [
          "name"
        ],
        "type": "object"
      },
      "FmeaItems": {
        "properties": {
          "action_taken": {
            "type": "string"
          },
          "cause": {
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "current_controls": {
            "type": "string"
          },
          "detection": {
            "type": "integer"
          },
          "effect": {
            "type": "string"
          },
          "failure_cause": {
            "type": "string"
          },
          "failure_effect": {
            "type": "string"
          },
          "failure_mode": {
            "type": "string"
          },
          "fmea_id": {
            "format": "uuid",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "new_detection": {
            "type": "integer"
          },
          "new_occurrence": {
            "type": "integer"
          },
          "new_rpn": {
            "type": "integer"
          },
          "new_severity": {
            "type": "integer"
          },
          "occurrence": {
            "type": "integer"
          },
          "process_step": {
            "type": "string"
          },
          "recommended_action": {
            "type": "string"
          },
          "responsible": {
            "type": "string"
          },
          "rpn": {
            "type": "integer"
          },
          "severity": {
            "type": "integer"
          },
          "status": {
            "type": "string"
          },
          "study_id": {
            "format": "uuid",
            "type": "string"
          },
          "target_date": {
            "format": "date",
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "failure_mode"
        ],
        "type": "object"
      },
      "FmeaStudies": {
        "properties": {
          "action_required": {
            "type": "integer"
          },
          "article_id": {
            "format": "uuid",
            "type": "string"
          },
          "average_rpn": {
            "type": "number"
          },
          "completed_at": {
            "format": "date-time",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "created_by": {
            "format": "uuid",
            "type": "string"
          },
          "deleted_at": {
            "format": "date-time",
            "type": "string"
          },
          "high_risk_count": {
            "type": "integer"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "number": {
            "type": "string"
          },
          "process_name": {
            "type": "string"
          },
          "risk_threshold": {
            "type": "integer"
          },
          "status": {
            "type": "string"
          },
          "team": {
            "items": {},
            "type": "array"
          },
          "title": {
            "type": "string"
          },
          "total_rpn": {
            "type": "integer"
          },
          "type": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "process_name",
          "title"
        ],
        "type": "object"
      },
      "GdprConsent": {
        "properties": {
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "granted": {
            "type": "boolean"
          },
          "granted_at": {
            "format": "date-time",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "ip_address": {
            "type": "string"
          },
          "purpose": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "user_agent": {
            "type": "string"
          },
          "user_id": {
            "format": "uuid",
            "type": "string"
          },
          "version": {
            "type": "string"
          },
          "withdrawn_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "purpose",
          "user_id"
        ],
        "type": "object"
      },
      "GdprRetentionPolicies": {
        "properties": {
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "entity_type": {
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "is_active": {
            "type": "boolean"
          },
          "legal_basis": {
            "type": "string"
          },
          "retention_days": {
            "type": "integer"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "entity_type",
          "retention_days"
        ],
        "type": "object"
      },
      "GroupConsolidationStatus": {
        "properties": {
          "company_id": {
            "format": "uuid",
            "type": "string"
          },
          "consolidated_at": {
            "format": "date-time",
            "type": "string"
          },
          "consolidated_by": {
            "format": "uuid",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "interco_total": {
            "type": "number"
          },
          "notes": {
            "type": "string"
          },
          "period": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "company_id",
          "period"
        ],
        "type": "object"
      },
      "GuideSteps": {
        "properties": {
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "guide_id": {
            "format": "uuid",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "position": {
            "type": "integer"
          },
          "title": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "type": "object"
      },
      "ImprovementProjects": {
        "properties": {
          "actual_gain": {
            "type": "number"
          },
          "actual_savings": {
            "type": "number"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "current_value": {
            "type": "number"
          },
          "deleted_at": {
            "format": "date-time",
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "dmaic_analyze": {
            "type": "string"
          },
          "dmaic_control": {
            "type": "string"
          },
          "dmaic_define": {
            "type": "string"
          },
          "dmaic_improve": {
            "type": "string"
          },
          "dmaic_measure": {
            "type": "string"
          },
          "end_date": {
            "format": "date",
            "type": "string"
          },
          "estimated_gain": {
            "type": "number"
          },
          "expected_savings": {
            "type": "number"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "methodology": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "owner_id": {
            "format": "uuid",
            "type": "string"
          },
          "priority": {
            "type": "string"
          },
          "start_date": {
            "format": "date",
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "target_date": {
            "format": "date",
            "type": "string"
          },
          "target_process": {
            "type": "string"
          },
          "target_value": {
            "type": "number"
          },
          "title": {
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "unit": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "name"
        ],
        "type": "object"
      },
      "IntercompanyBillings": {
        "properties": {
          "amount": {
            "type": "number"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "created_by": {
            "format": "uuid",
            "type": "string"
          },
          "currency": {
            "type": "string"
          },
          "from_entity": {
            "format": "uuid",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "notes": {
            "type": "string"
          },
          "period": {
            "type": "string"
          },
          "reference": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "to_entity": {
            "format": "uuid",
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "from_entity",
          "period",
          "to_entity"
        ],
        "type": "object"
      },
      "InterventionParts": {
        "properties": {
          "article_id": {
            "format": "uuid",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "intervention_id": {
            "format": "uuid",
            "type": "string"
          },
          "notes": {
            "type": "string"
          },
          "quantity": {
            "type": "number"
          },
          "unit_price": {
            "type": "number"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "quantity"
        ],
        "type": "object"
      },
      "InterventionSpareParts": {
        "properties": {
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "intervention_id": {
            "format": "uuid",
            "type": "string"
          },
          "quantity": {
            "type": "integer"
          },
          "spare_part_id": {
            "format": "uuid",
            "type": "string"
          },
          "unit_price": {
            "type": "number"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "type": "object"
      },
      "InterventionTypes": {
        "properties": {
          "category": {
            "type": "string"
          },
          "code": {
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "estimated_duration": {
            "type": "integer"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "is_active": {
            "type": "boolean"
          },
          "name": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "name"
        ],
        "type": "object"
      },
      "Interventions": {
        "properties": {
          "assigned_technician_id": {
            "format": "uuid",
            "type": "string"
          },
          "assigned_to": {
            "format": "uuid",
            "type": "string"
          },
          "category": {
            "type": "string"
          },
          "completed_at": {
            "format": "date-time",
            "type": "string"
          },
          "cost": {
            "type": "number"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "created_by": {
            "format": "uuid",
            "type": "string"
          },
          "declaration_date": {
            "format": "date-time",
            "type": "string"
          },
          "deleted_at": {
            "format": "date-time",
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "downtime_hours": {
            "type": "number"
          },
          "duration_hours": {
            "type": "number"
          },
          "duration_minutes": {
            "type": "integer"
          },
          "equipment_id": {
            "format": "uuid",
            "type": "string"
          },
          "equipment_name": {
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "intervention_number": {
            "type": "string"
          },
          "intervention_type_id": {
            "format": "uuid",
            "type": "string"
          },
          "is_active": {
            "type": "boolean"
          },
          "labor_cost": {
            "type": "number"
          },
          "number": {
            "type": "string"
          },
          "order_type": {
            "type": "string"
          },
          "parts_cost": {
            "type": "number"
          },
          "planned_date": {
            "format": "date-time",
            "type": "string"
          },
          "priority": {
            "type": "integer"
          },
          "priority_level": {
            "type": "string"
          },
          "problem_description": {
            "type": "string"
          },
          "project_id": {
            "format": "uuid",
            "type": "string"
          },
          "resolution_notes": {
            "type": "string"
          },
          "scheduled_date": {
            "format": "date-time",
            "type": "string"
          },
          "serial_number": {
            "type": "string"
          },
          "service_contract_id": {
            "format": "uuid",
            "type": "string"
          },
          "solution_description": {
            "type": "string"
          },
          "standard_duration_hours": {
            "type": "number"
          },
          "started_at": {
            "format": "date-time",
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "workstation_id": {
            "format": "uuid",
            "type": "string"
          }
        },
        "required": [
          "number"
        ],
        "type": "object"
      },
      "Inventories": {
        "properties": {
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "created_by": {
            "format": "uuid",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "inventory_date": {
            "format": "date",
            "type": "string"
          },
          "inventory_number": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "notes": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "warehouse_id": {
            "format": "uuid",
            "type": "string"
          }
        },
        "required": [
          "inventory_number"
        ],
        "type": "object"
      },
      "InventoryLines": {
        "properties": {
          "article_id": {
            "format": "uuid",
            "type": "string"
          },
          "counted_qty": {
            "type": "number"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "expected_qty": {
            "type": "number"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "inventory_id": {
            "format": "uuid",
            "type": "string"
          },
          "lot_id": {
            "format": "uuid",
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "variance": {
            "type": "number"
          }
        },
        "required": [
          "inventory_id"
        ],
        "type": "object"
      },
      "InvoiceItems": {
        "properties": {
          "article_id": {
            "format": "uuid",
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "dim1_value_id": {
            "format": "uuid",
            "type": "string"
          },
          "dim2_value_id": {
            "format": "uuid",
            "type": "string"
          },
          "dim_set": {
            "type": "object"
          },
          "discount": {
            "type": "number"
          },
          "discount_2": {
            "type": "number"
          },
          "discount_2_type": {
            "type": "string"
          },
          "discount_type": {
            "type": "string"
          },
          "fodec_rate": {
            "type": "number"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "invoice_id": {
            "format": "uuid",
            "type": "string"
          },
          "position": {
            "type": "integer"
          },
          "quantity": {
            "type": "number"
          },
          "sort_order": {
            "type": "integer"
          },
          "tax_rate": {
            "type": "number"
          },
          "total": {
            "type": "number"
          },
          "unit": {
            "type": "string"
          },
          "unit_price": {
            "type": "number"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "invoice_id",
          "quantity",
          "unit_price"
        ],
        "type": "object"
      },
      "Invoices": {
        "properties": {
          "advance_deduction": {
            "type": "number"
          },
          "affair_id": {
            "format": "uuid",
            "type": "string"
          },
          "amount_paid": {
            "type": "number"
          },
          "archived_at": {
            "format": "date-time",
            "type": "string"
          },
          "archived_by": {
            "format": "uuid",
            "type": "string"
          },
          "client_id": {
            "format": "uuid",
            "type": "string"
          },
          "contact_id": {
            "format": "uuid",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "created_by": {
            "format": "uuid",
            "type": "string"
          },
          "currency": {
            "type": "string"
          },
          "customer_po": {
            "type": "string"
          },
          "date": {
            "format": "date-time",
            "type": "string"
          },
          "deleted_at": {
            "format": "date-time",
            "type": "string"
          },
          "delivery_address": {
            "type": "string"
          },
          "delivery_note_id": {
            "format": "uuid",
            "type": "string"
          },
          "dim1_value_id": {
            "format": "uuid",
            "type": "string"
          },
          "dim2_value_id": {
            "format": "uuid",
            "type": "string"
          },
          "dim_set": {
            "type": "object"
          },
          "discount": {
            "type": "number"
          },
          "discount_2": {
            "type": "number"
          },
          "discount_2_type": {
            "type": "string"
          },
          "discount_type": {
            "type": "string"
          },
          "due_date": {
            "format": "date-time",
            "type": "string"
          },
          "exchange_rate": {
            "type": "number"
          },
          "fodec_amount": {
            "type": "number"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "incoterms": {
            "type": "string"
          },
          "intervention_id": {
            "format": "uuid",
            "type": "string"
          },
          "intervention_ref": {
            "type": "string"
          },
          "invoice_number": {
            "type": "string"
          },
          "invoice_type": {
            "type": "string"
          },
          "issue_date": {
            "format": "date-time",
            "type": "string"
          },
          "notes": {
            "type": "string"
          },
          "number": {
            "type": "string"
          },
          "operation_type": {
            "type": "string"
          },
          "payment_method": {
            "type": "string"
          },
          "payment_status": {
            "type": "string"
          },
          "payment_term_id": {
            "format": "uuid",
            "type": "string"
          },
          "portal_payment_reference": {
            "type": "string"
          },
          "portal_payment_status": {
            "type": "string"
          },
          "project_ref": {
            "type": "string"
          },
          "quote_id": {
            "format": "uuid",
            "type": "string"
          },
          "sales_order_id": {
            "format": "uuid",
            "type": "string"
          },
          "stamp_duty": {
            "type": "number"
          },
          "status": {
            "type": "string"
          },
          "subject": {
            "type": "string"
          },
          "subtotal": {
            "type": "number"
          },
          "tax_amount": {
            "type": "number"
          },
          "terms": {
            "type": "string"
          },
          "total": {
            "type": "number"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "updated_by": {
            "format": "uuid",
            "type": "string"
          },
          "warehouse_id": {
            "format": "uuid",
            "type": "string"
          },
          "withholding_tax_rate": {
            "type": "number"
          }
        },
        "required": [
          "number"
        ],
        "type": "object"
      },
      "IsoTraceabilityLog": {
        "properties": {
          "action": {
            "type": "string"
          },
          "clause": {
            "type": "string"
          },
          "entity_id": {
            "format": "uuid",
            "type": "string"
          },
          "entity_type": {
            "type": "string"
          },
          "evidence_url": {
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "metadata": {
            "type": "object"
          },
          "notes": {
            "type": "string"
          },
          "performed_at": {
            "format": "date-time",
            "type": "string"
          },
          "performed_by": {
            "format": "uuid",
            "type": "string"
          },
          "standard": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "action",
          "clause",
          "entity_id",
          "entity_type",
          "standard"
        ],
        "type": "object"
      },
      "LeaveRequests": {
        "properties": {
          "approved_at": {
            "format": "date-time",
            "type": "string"
          },
          "approved_by": {
            "format": "uuid",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "days": {
            "type": "number"
          },
          "employee_id": {
            "format": "uuid",
            "type": "string"
          },
          "end_date": {
            "format": "date",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "leave_type": {
            "type": "string"
          },
          "number": {
            "type": "string"
          },
          "reason": {
            "type": "string"
          },
          "start_date": {
            "format": "date",
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "employee_id",
          "end_date",
          "leave_type",
          "start_date"
        ],
        "type": "object"
      },
      "LotMovements": {
        "properties": {
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "created_by": {
            "format": "uuid",
            "type": "string"
          },
          "destination_location": {
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "lot_id": {
            "format": "uuid",
            "type": "string"
          },
          "movement_type": {
            "type": "string"
          },
          "notes": {
            "type": "string"
          },
          "quantity": {
            "type": "number"
          },
          "reference": {
            "type": "string"
          },
          "source_location": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "movement_type",
          "quantity"
        ],
        "type": "object"
      },
      "LotTracking": {
        "properties": {
          "article_id": {
            "format": "uuid",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "expiry_date": {
            "format": "date",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "lot_number": {
            "type": "string"
          },
          "manufacturing_order_id": {
            "format": "uuid",
            "type": "string"
          },
          "notes": {
            "type": "string"
          },
          "production_date": {
            "format": "date",
            "type": "string"
          },
          "quality_status": {
            "type": "string"
          },
          "quantity": {
            "type": "number"
          },
          "remaining_quantity": {
            "type": "number"
          },
          "status": {
            "type": "string"
          },
          "supplier_id": {
            "format": "uuid",
            "type": "string"
          },
          "supplier_lot": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "warehouse_id": {
            "format": "uuid",
            "type": "string"
          }
        },
        "required": [
          "article_id",
          "lot_number",
          "quantity"
        ],
        "type": "object"
      },
      "MachineMeasurements": {
        "properties": {
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "is_anomaly": {
            "type": "boolean"
          },
          "machine_id": {
            "format": "uuid",
            "type": "string"
          },
          "parameter": {
            "type": "string"
          },
          "timestamp": {
            "format": "date-time",
            "type": "string"
          },
          "unit": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "value": {
            "type": "number"
          }
        },
        "required": [
          "parameter",
          "value"
        ],
        "type": "object"
      },
      "MachineStops": {
        "properties": {
          "action_taken": {
            "type": "string"
          },
          "cause_code": {
            "type": "string"
          },
          "cause_description": {
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "duration": {
            "type": "integer"
          },
          "end_time": {
            "format": "date-time",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "machine_id": {
            "format": "uuid",
            "type": "string"
          },
          "manufacturing_order_id": {
            "format": "uuid",
            "type": "string"
          },
          "resolved_by": {
            "format": "uuid",
            "type": "string"
          },
          "root_cause": {
            "type": "string"
          },
          "start_time": {
            "format": "date-time",
            "type": "string"
          },
          "stop_type": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "start_time"
        ],
        "type": "object"
      },
      "MaintenanceSchedules": {
        "properties": {
          "assigned_to": {
            "format": "uuid",
            "type": "string"
          },
          "checklist": {
            "type": "object"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "equipment_id": {
            "format": "uuid",
            "type": "string"
          },
          "estimated_duration_hours": {
            "type": "number"
          },
          "frequency_type": {
            "type": "string"
          },
          "frequency_value": {
            "type": "integer"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "is_active": {
            "type": "boolean"
          },
          "last_executed_at": {
            "format": "date-time",
            "type": "string"
          },
          "next_due_at": {
            "format": "date-time",
            "type": "string"
          },
          "priority": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "equipment_id",
          "title"
        ],
        "type": "object"
      },
      "ManagementReviews": {
        "properties": {
          "attendees": {
            "items": {},
            "type": "array"
          },
          "chairperson_id": {
            "format": "uuid",
            "type": "string"
          },
          "conclusions": {
            "type": "string"
          },
          "conducted_date": {
            "format": "date",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "deleted_at": {
            "format": "date-time",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "minutes": {
            "type": "string"
          },
          "next_review_date": {
            "format": "date",
            "type": "string"
          },
          "review_period": {
            "type": "string"
          },
          "scheduled_date": {
            "format": "date",
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "review_period",
          "scheduled_date",
          "title"
        ],
        "type": "object"
      },
      "ManufacturingDashboard": {
        "properties": {
          "active_operations": {
            "type": "integer"
          },
          "actual_cost": {
            "type": "number"
          },
          "actual_end_date": {
            "format": "date-time",
            "type": "string"
          },
          "actual_start_date": {
            "format": "date-time",
            "type": "string"
          },
          "affair_id": {
            "format": "uuid",
            "type": "string"
          },
          "client_id": {
            "format": "uuid",
            "type": "string"
          },
          "client_name": {
            "type": "string"
          },
          "completed_operations": {
            "type": "integer"
          },
          "completion_percentage": {
            "type": "number"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "estimated_cost": {
            "type": "number"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "labor_cost": {
            "type": "number"
          },
          "material_cost": {
            "type": "number"
          },
          "order_number": {
            "type": "string"
          },
          "order_status": {
            "type": "string"
          },
          "pending_operations": {
            "type": "integer"
          },
          "planned_end_date": {
            "format": "date",
            "type": "string"
          },
          "planned_start_date": {
            "format": "date",
            "type": "string"
          },
          "priority": {
            "type": "integer"
          },
          "product_name": {
            "type": "string"
          },
          "quantity": {
            "type": "number"
          },
          "quantity_produced": {
            "type": "number"
          },
          "responsable_name": {
            "type": "string"
          },
          "time_variance": {
            "type": "integer"
          },
          "total_actual_duration": {
            "type": "integer"
          },
          "total_estimated_duration": {
            "type": "integer"
          },
          "total_operations": {
            "type": "integer"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "type": "object"
      },
      "ManufacturingFlows": {
        "properties": {
          "active": {
            "type": "boolean"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "is_template": {
            "type": "boolean"
          },
          "name": {
            "type": "string"
          },
          "product_id": {
            "format": "uuid",
            "type": "string"
          },
          "source_flow_id": {
            "format": "uuid",
            "type": "string"
          },
          "steps": {
            "type": "object"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "name"
        ],
        "type": "object"
      },
      "ManufacturingOperations": {
        "properties": {
          "actual_duration": {
            "type": "integer"
          },
          "completed_at": {
            "format": "date-time",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "estimated_duration": {
            "type": "integer"
          },
          "first_pass_yield": {
            "type": "number"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "manufacturing_order_id": {
            "format": "uuid",
            "type": "string"
          },
          "mo_line_id": {
            "format": "uuid",
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "notes": {
            "type": "string"
          },
          "operation_kind": {
            "type": "string"
          },
          "operation_name": {
            "type": "string"
          },
          "operator_id": {
            "format": "uuid",
            "type": "string"
          },
          "parent_operation_id": {
            "format": "uuid",
            "type": "string"
          },
          "pause_count": {
            "type": "integer"
          },
          "pause_duration": {
            "type": "integer"
          },
          "paused_at": {
            "format": "date-time",
            "type": "string"
          },
          "planned_duration": {
            "type": "integer"
          },
          "quality_check": {
            "type": "boolean"
          },
          "quantity_good": {
            "type": "number"
          },
          "quantity_produced": {
            "type": "number"
          },
          "quantity_rejected": {
            "type": "number"
          },
          "quantity_rework": {
            "type": "number"
          },
          "quantity_scrap": {
            "type": "number"
          },
          "rework_cost": {
            "type": "number"
          },
          "rework_qty": {
            "type": "number"
          },
          "rework_reason": {
            "type": "string"
          },
          "scrap_cost": {
            "type": "number"
          },
          "sequence": {
            "type": "integer"
          },
          "started_at": {
            "format": "date-time",
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "workstation_id": {
            "format": "uuid",
            "type": "string"
          }
        },
        "required": [
          "manufacturing_order_id",
          "name"
        ],
        "type": "object"
      },
      "ManufacturingOrderLines": {
        "properties": {
          "actual_cost": {
            "type": "number"
          },
          "article_id": {
            "format": "uuid",
            "type": "string"
          },
          "bom_id": {
            "format": "uuid",
            "type": "string"
          },
          "cost_estimate": {
            "type": "number"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "designation": {
            "type": "string"
          },
          "dim1_value_id": {
            "format": "uuid",
            "type": "string"
          },
          "dim2_value_id": {
            "format": "uuid",
            "type": "string"
          },
          "dim_set": {
            "type": "object"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "line_no": {
            "type": "integer"
          },
          "line_type": {
            "type": "string"
          },
          "manufacturing_order_id": {
            "format": "uuid",
            "type": "string"
          },
          "notes": {
            "type": "string"
          },
          "planned_end": {
            "format": "date",
            "type": "string"
          },
          "planned_start": {
            "format": "date",
            "type": "string"
          },
          "produced_quantity": {
            "type": "number"
          },
          "quantity": {
            "type": "number"
          },
          "scrap_quantity": {
            "type": "number"
          },
          "status": {
            "type": "string"
          },
          "stock_completed_at": {
            "format": "date-time",
            "type": "string"
          },
          "stock_completed_qty": {
            "type": "number"
          },
          "unit": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "manufacturing_order_id"
        ],
        "type": "object"
      },
      "ManufacturingOrders": {
        "properties": {
          "actual_cost": {
            "type": "number"
          },
          "actual_end": {
            "format": "date-time",
            "type": "string"
          },
          "actual_start": {
            "format": "date-time",
            "type": "string"
          },
          "affair_id": {
            "format": "uuid",
            "type": "string"
          },
          "article_id": {
            "format": "uuid",
            "type": "string"
          },
          "bom_id": {
            "format": "uuid",
            "type": "string"
          },
          "chantier_id": {
            "format": "uuid",
            "type": "string"
          },
          "client_id": {
            "format": "uuid",
            "type": "string"
          },
          "cost_estimate": {
            "type": "number"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "created_by": {
            "format": "uuid",
            "type": "string"
          },
          "deleted_at": {
            "format": "date-time",
            "type": "string"
          },
          "delivery_date": {
            "format": "date",
            "type": "string"
          },
          "designation": {
            "type": "string"
          },
          "dim1_value_id": {
            "format": "uuid",
            "type": "string"
          },
          "dim2_value_id": {
            "format": "uuid",
            "type": "string"
          },
          "dim_set": {
            "type": "object"
          },
          "end_date": {
            "format": "date",
            "type": "string"
          },
          "flow_data": {
            "type": "object"
          },
          "flow_id": {
            "format": "uuid",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "is_active": {
            "type": "boolean"
          },
          "is_simulation": {
            "type": "boolean"
          },
          "labor_variance": {
            "type": "number"
          },
          "material_variance": {
            "type": "number"
          },
          "non_quality_cost": {
            "type": "number"
          },
          "notes": {
            "type": "string"
          },
          "number": {
            "type": "string"
          },
          "order_number": {
            "type": "string"
          },
          "planned_end": {
            "format": "date",
            "type": "string"
          },
          "planned_quantity": {
            "type": "number"
          },
          "planned_start": {
            "format": "date",
            "type": "string"
          },
          "priority": {
            "type": "integer"
          },
          "produced_quantity": {
            "type": "number"
          },
          "product_name": {
            "type": "string"
          },
          "progress": {
            "type": "integer"
          },
          "purchase_order_number": {
            "type": "string"
          },
          "quantity": {
            "type": "number"
          },
          "rework_quantity": {
            "type": "number"
          },
          "scrap_quantity": {
            "type": "number"
          },
          "standard_cost": {
            "type": "number"
          },
          "start_date": {
            "format": "date",
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "total_variance": {
            "type": "number"
          },
          "unit_cost": {
            "type": "number"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "warehouse_id": {
            "format": "uuid",
            "type": "string"
          }
        },
        "required": [
          "number",
          "quantity"
        ],
        "type": "object"
      },
      "MarketingCampaigns": {
        "properties": {
          "actual_cost": {
            "type": "number"
          },
          "audience_segment": {
            "type": "string"
          },
          "audience_size": {
            "type": "integer"
          },
          "budget": {
            "type": "number"
          },
          "clicks": {
            "type": "integer"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "created_by": {
            "format": "uuid",
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "end_date": {
            "format": "date",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "kpi_target_conversions": {
            "type": "integer"
          },
          "kpi_target_leads": {
            "type": "integer"
          },
          "kpi_target_revenue": {
            "type": "number"
          },
          "kpi_target_roi": {
            "type": "number"
          },
          "name": {
            "type": "string"
          },
          "objective": {
            "type": "string"
          },
          "opens": {
            "type": "integer"
          },
          "sent": {
            "type": "integer"
          },
          "start_date": {
            "format": "date",
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "target_segment_id": {
            "format": "uuid",
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "name"
        ],
        "type": "object"
      },
      "MeasurementInstruments": {
        "properties": {
          "calibration_frequency_days": {
            "type": "integer"
          },
          "certificate_url": {
            "type": "string"
          },
          "code": {
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "is_active": {
            "type": "boolean"
          },
          "last_calibration_date": {
            "format": "date",
            "type": "string"
          },
          "location": {
            "type": "string"
          },
          "manufacturer": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "next_calibration_date": {
            "format": "date",
            "type": "string"
          },
          "range_max": {
            "type": "number"
          },
          "range_min": {
            "type": "number"
          },
          "resolution": {
            "type": "number"
          },
          "responsible": {
            "type": "string"
          },
          "serial_number": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "unit": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "code",
          "name"
        ],
        "type": "object"
      },
      "MoSerialOperationScans": {
        "properties": {
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "manufacturing_operation_id": {
            "format": "uuid",
            "type": "string"
          },
          "manufacturing_order_id": {
            "format": "uuid",
            "type": "string"
          },
          "notes": {
            "type": "string"
          },
          "operation_sequence": {
            "type": "integer"
          },
          "operator_id": {
            "format": "uuid",
            "type": "string"
          },
          "scan_result": {
            "type": "string"
          },
          "scanned_at": {
            "format": "date-time",
            "type": "string"
          },
          "serial_id": {
            "format": "uuid",
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "workstation_id": {
            "format": "uuid",
            "type": "string"
          }
        },
        "required": [
          "manufacturing_operation_id",
          "manufacturing_order_id",
          "serial_id"
        ],
        "type": "object"
      },
      "MrpExceptions": {
        "properties": {
          "article_code": {
            "type": "string"
          },
          "article_id": {
            "format": "uuid",
            "type": "string"
          },
          "article_name": {
            "type": "string"
          },
          "code": {
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "existing_date": {
            "format": "date",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "message": {
            "type": "string"
          },
          "mrp_run_id": {
            "format": "uuid",
            "type": "string"
          },
          "proposed_date": {
            "format": "date",
            "type": "string"
          },
          "related_document_id": {
            "format": "uuid",
            "type": "string"
          },
          "related_document_number": {
            "type": "string"
          },
          "related_document_type": {
            "type": "string"
          },
          "severity": {
            "type": "string"
          },
          "suggestion_id": {
            "format": "uuid",
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "variance_days": {
            "type": "integer"
          },
          "variance_qty": {
            "type": "number"
          }
        },
        "required": [
          "code"
        ],
        "type": "object"
      },
      "MrpPlannedOrders": {
        "properties": {
          "article_id": {
            "format": "uuid",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "level": {
            "type": "integer"
          },
          "manufacturing_order_id": {
            "format": "uuid",
            "type": "string"
          },
          "notes": {
            "type": "string"
          },
          "order_type": {
            "type": "string"
          },
          "parent_order_id": {
            "format": "uuid",
            "type": "string"
          },
          "purchase_request_id": {
            "format": "uuid",
            "type": "string"
          },
          "quantity": {
            "type": "number"
          },
          "required_date": {
            "format": "date",
            "type": "string"
          },
          "source": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "article_id",
          "order_type",
          "quantity",
          "required_date"
        ],
        "type": "object"
      },
      "MrpRuns": {
        "properties": {
          "articles_processed": {
            "type": "integer"
          },
          "completed_at": {
            "format": "date-time",
            "type": "string"
          },
          "created_by": {
            "format": "uuid",
            "type": "string"
          },
          "demand_sources": {
            "type": "object"
          },
          "horizon_days": {
            "type": "integer"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "parameters": {
            "type": "object"
          },
          "run_date": {
            "format": "date-time",
            "type": "string"
          },
          "run_type": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "suggestions_created": {
            "type": "integer"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "type": "object"
      },
      "MrpSuggestions": {
        "properties": {
          "accepted": {
            "type": "boolean"
          },
          "article_code": {
            "type": "string"
          },
          "article_id": {
            "format": "uuid",
            "type": "string"
          },
          "article_name": {
            "type": "string"
          },
          "converted_id": {
            "format": "uuid",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "due_date": {
            "format": "date",
            "type": "string"
          },
          "exception_code": {
            "type": "string"
          },
          "gross_requirement": {
            "type": "number"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "lead_time_days": {
            "type": "integer"
          },
          "lead_time_source": {
            "type": "string"
          },
          "level": {
            "type": "integer"
          },
          "mrp_run_id": {
            "format": "uuid",
            "type": "string"
          },
          "net_requirement": {
            "type": "number"
          },
          "order_date": {
            "format": "date",
            "type": "string"
          },
          "priority": {
            "type": "string"
          },
          "qty_on_order": {
            "type": "number"
          },
          "quantity": {
            "type": "number"
          },
          "required_date": {
            "format": "date",
            "type": "string"
          },
          "safety_stock": {
            "type": "number"
          },
          "source_id": {
            "format": "uuid",
            "type": "string"
          },
          "source_type": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "stock_on_hand": {
            "type": "number"
          },
          "suggested_qty": {
            "type": "number"
          },
          "suggestion_type": {
            "type": "string"
          },
          "supplier_id": {
            "format": "uuid",
            "type": "string"
          },
          "supplier_name": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "type": "object"
      },
      "NonConformities": {
        "properties": {
          "affected_product": {
            "type": "string"
          },
          "affected_quantity": {
            "type": "number"
          },
          "article_id": {
            "format": "uuid",
            "type": "string"
          },
          "assigned_to": {
            "format": "uuid",
            "type": "string"
          },
          "closed_at": {
            "format": "date-time",
            "type": "string"
          },
          "closed_by": {
            "format": "uuid",
            "type": "string"
          },
          "corrective_action": {
            "type": "string"
          },
          "cost_impact": {
            "type": "number"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "customer_impact": {
            "type": "string"
          },
          "deleted_at": {
            "format": "date-time",
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "detected_by": {
            "format": "uuid",
            "type": "string"
          },
          "due_date": {
            "format": "date",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "immediate_action": {
            "type": "string"
          },
          "incoming_inspection_id": {
            "format": "uuid",
            "type": "string"
          },
          "manufacturing_order_id": {
            "format": "uuid",
            "type": "string"
          },
          "notes": {
            "type": "string"
          },
          "number": {
            "type": "string"
          },
          "preventive_action": {
            "type": "string"
          },
          "reception_id": {
            "format": "uuid",
            "type": "string"
          },
          "responsible": {
            "format": "uuid",
            "type": "string"
          },
          "root_cause": {
            "type": "string"
          },
          "severity": {
            "type": "string"
          },
          "source": {
            "type": "string"
          },
          "source_type": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "workflow_step": {
            "type": "string"
          }
        },
        "required": [
          "number",
          "title",
          "type"
        ],
        "type": "object"
      },
      "NotificationLogs": {
        "properties": {
          "body": {
            "type": "string"
          },
          "channel": {
            "type": "string"
          },
          "entity_id": {
            "format": "uuid",
            "type": "string"
          },
          "entity_type": {
            "type": "string"
          },
          "event_type": {
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "read": {
            "type": "boolean"
          },
          "sent_at": {
            "format": "date-time",
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "user_id": {
            "format": "uuid",
            "type": "string"
          }
        },
        "type": "object"
      },
      "NotificationSettings": {
        "properties": {
          "channel": {
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "email": {
            "type": "string"
          },
          "enabled": {
            "type": "boolean"
          },
          "event_type": {
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "user_id": {
            "format": "uuid",
            "type": "string"
          }
        },
        "required": [
          "event_type",
          "user_id"
        ],
        "type": "object"
      },
      "NumberingSequences": {
        "properties": {
          "current_number": {
            "type": "integer"
          },
          "entity_type": {
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "last_reset_month": {
            "type": "integer"
          },
          "last_reset_year": {
            "type": "integer"
          },
          "padding": {
            "type": "integer"
          },
          "prefix": {
            "type": "string"
          },
          "reset_yearly": {
            "type": "boolean"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "entity_type",
          "prefix"
        ],
        "type": "object"
      },
      "OeeRecords": {
        "properties": {
          "actual_production_time": {
            "type": "integer"
          },
          "availability": {
            "type": "number"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "created_by": {
            "format": "uuid",
            "type": "string"
          },
          "date": {
            "format": "date",
            "type": "string"
          },
          "deleted_at": {
            "format": "date-time",
            "type": "string"
          },
          "good_pieces": {
            "type": "integer"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "notes": {
            "type": "string"
          },
          "oee": {
            "type": "number"
          },
          "oee_overall": {
            "type": "number"
          },
          "performance": {
            "type": "number"
          },
          "planned_production_time": {
            "type": "integer"
          },
          "quality_rate": {
            "type": "number"
          },
          "record_date": {
            "format": "date",
            "type": "string"
          },
          "recorded_at": {
            "format": "date-time",
            "type": "string"
          },
          "total_pieces": {
            "type": "integer"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "workstation_id": {
            "format": "uuid",
            "type": "string"
          },
          "workstation_name": {
            "type": "string"
          }
        },
        "required": [
          "record_date"
        ],
        "type": "object"
      },
      "OfGenerationHistory": {
        "properties": {
          "generated_at": {
            "format": "date-time",
            "type": "string"
          },
          "generated_by": {
            "format": "uuid",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "manufacturing_order_id": {
            "format": "uuid",
            "type": "string"
          },
          "metadata": {
            "type": "object"
          },
          "source_id": {
            "format": "uuid",
            "type": "string"
          },
          "source_type": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "type": "object"
      },
      "OperationConfirmations": {
        "properties": {
          "cancellation_reason": {
            "type": "string"
          },
          "cancelled_at": {
            "format": "date-time",
            "type": "string"
          },
          "cancelled_by": {
            "format": "uuid",
            "type": "string"
          },
          "cancelled_by_name": {
            "type": "string"
          },
          "confirmed_at": {
            "format": "date-time",
            "type": "string"
          },
          "confirmed_by": {
            "format": "uuid",
            "type": "string"
          },
          "confirmed_by_name": {
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "labor_cost": {
            "type": "number"
          },
          "labor_hours": {
            "type": "number"
          },
          "machine_hours": {
            "type": "number"
          },
          "manufacturing_order_id": {
            "format": "uuid",
            "type": "string"
          },
          "material_cost": {
            "type": "number"
          },
          "notes": {
            "type": "string"
          },
          "operation_id": {
            "format": "uuid",
            "type": "string"
          },
          "operator_id": {
            "format": "uuid",
            "type": "string"
          },
          "operator_name": {
            "type": "string"
          },
          "overhead_cost": {
            "type": "number"
          },
          "quantity_good": {
            "type": "number"
          },
          "quantity_rework": {
            "type": "number"
          },
          "quantity_scrap": {
            "type": "number"
          },
          "rework_reason": {
            "type": "string"
          },
          "scrap_reason": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "manufacturing_order_id",
          "operation_id"
        ],
        "type": "object"
      },
      "Opportunities": {
        "properties": {
          "amount": {
            "type": "number"
          },
          "assigned_to": {
            "format": "uuid",
            "type": "string"
          },
          "channel": {
            "type": "string"
          },
          "client_id": {
            "format": "uuid",
            "type": "string"
          },
          "contact_person": {
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "deleted_at": {
            "format": "date-time",
            "type": "string"
          },
          "delivery_constraints": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "estimated_budget": {
            "type": "number"
          },
          "expected_close": {
            "format": "date-time",
            "type": "string"
          },
          "expected_close_date": {
            "format": "date",
            "type": "string"
          },
          "expected_revenue": {
            "type": "number"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "linked_product_id": {
            "format": "uuid",
            "type": "string"
          },
          "lost_reason": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "notes": {
            "type": "string"
          },
          "opportunity_number": {
            "type": "string"
          },
          "priority": {
            "type": "string"
          },
          "probability": {
            "type": "integer"
          },
          "quality_requirements": {
            "type": "string"
          },
          "required_volume": {
            "type": "number"
          },
          "sales_person": {
            "type": "string"
          },
          "segment": {
            "type": "string"
          },
          "source": {
            "type": "string"
          },
          "specifications": {
            "type": "string"
          },
          "stage": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "name"
        ],
        "type": "object"
      },
      "PaymentSchedules": {
        "properties": {
          "amount": {
            "type": "number"
          },
          "client_id": {
            "format": "uuid",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "delivery_note_id": {
            "format": "uuid",
            "type": "string"
          },
          "due_date": {
            "format": "date",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "invoice_id": {
            "format": "uuid",
            "type": "string"
          },
          "notes": {
            "type": "string"
          },
          "paid_amount": {
            "type": "number"
          },
          "payment_date": {
            "format": "date",
            "type": "string"
          },
          "payment_method": {
            "type": "string"
          },
          "purchase_order_id": {
            "format": "uuid",
            "type": "string"
          },
          "reference": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "supplier_id": {
            "format": "uuid",
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "amount",
          "due_date"
        ],
        "type": "object"
      },
      "PaymentTerms": {
        "properties": {
          "active": {
            "type": "boolean"
          },
          "code": {
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "days": {
            "type": "integer"
          },
          "description": {
            "type": "string"
          },
          "discount_days": {
            "type": "integer"
          },
          "discount_percent": {
            "type": "number"
          },
          "end_of_month": {
            "type": "boolean"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "is_default": {
            "type": "boolean"
          },
          "name": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "name"
        ],
        "type": "object"
      },
      "Payments": {
        "properties": {
          "amount": {
            "type": "number"
          },
          "bank_name": {
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "invoice_id": {
            "format": "uuid",
            "type": "string"
          },
          "notes": {
            "type": "string"
          },
          "payment_date": {
            "format": "date",
            "type": "string"
          },
          "payment_method": {
            "type": "string"
          },
          "purchase_order_id": {
            "format": "uuid",
            "type": "string"
          },
          "reference": {
            "type": "string"
          },
          "schedule_id": {
            "format": "uuid",
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "amount",
          "payment_date",
          "payment_method"
        ],
        "type": "object"
      },
      "PayrollEntries": {
        "properties": {
          "bonuses": {
            "type": "number"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "deductions": {
            "type": "number"
          },
          "employee_id": {
            "format": "uuid",
            "type": "string"
          },
          "gross_salary": {
            "type": "number"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "month": {
            "type": "integer"
          },
          "net_salary": {
            "type": "number"
          },
          "paid_at": {
            "format": "date-time",
            "type": "string"
          },
          "period": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "year": {
            "type": "integer"
          }
        },
        "required": [
          "employee_id",
          "period"
        ],
        "type": "object"
      },
      "PayrollRuns": {
        "properties": {
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "employee_count": {
            "type": "integer"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "notes": {
            "type": "string"
          },
          "paid_at": {
            "format": "date-time",
            "type": "string"
          },
          "period": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "total_employer_charges": {
            "type": "number"
          },
          "total_gross": {
            "type": "number"
          },
          "total_net": {
            "type": "number"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "validated_at": {
            "format": "date-time",
            "type": "string"
          },
          "validated_by": {
            "format": "uuid",
            "type": "string"
          }
        },
        "required": [
          "period"
        ],
        "type": "object"
      },
      "PayrollSlips": {
        "properties": {
          "accident_travail": {
            "type": "number"
          },
          "base_salary": {
            "type": "number"
          },
          "bonus_details": {
            "type": "object"
          },
          "bonuses": {
            "type": "number"
          },
          "cnss_employee": {
            "type": "number"
          },
          "cnss_employer": {
            "type": "number"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "css": {
            "type": "number"
          },
          "deduction_details": {
            "type": "object"
          },
          "deductions": {
            "type": "number"
          },
          "employee_id": {
            "format": "uuid",
            "type": "string"
          },
          "foprolos": {
            "type": "number"
          },
          "gross_salary": {
            "type": "number"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "irpp": {
            "type": "number"
          },
          "net_salary": {
            "type": "number"
          },
          "overtime_amount": {
            "type": "number"
          },
          "overtime_hours": {
            "type": "number"
          },
          "payroll_run_id": {
            "format": "uuid",
            "type": "string"
          },
          "period": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "tfp": {
            "type": "number"
          },
          "total_employer_cost": {
            "type": "number"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "worked_days": {
            "type": "number"
          },
          "worked_hours": {
            "type": "number"
          }
        },
        "required": [
          "employee_id",
          "payroll_run_id",
          "period"
        ],
        "type": "object"
      },
      "PlanningForecasts": {
        "properties": {
          "actual_qty": {
            "type": "number"
          },
          "article_id": {
            "format": "uuid",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "forecast_qty": {
            "type": "number"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "notes": {
            "type": "string"
          },
          "period": {
            "type": "string"
          },
          "planned_qty": {
            "type": "number"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "period"
        ],
        "type": "object"
      },
      "PriceListItems": {
        "properties": {
          "article_id": {
            "format": "uuid",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "min_quantity": {
            "type": "number"
          },
          "price_list_id": {
            "format": "uuid",
            "type": "string"
          },
          "unit_price": {
            "type": "number"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "price_list_id",
          "unit_price"
        ],
        "type": "object"
      },
      "PriceLists": {
        "properties": {
          "active": {
            "type": "boolean"
          },
          "code": {
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "currency": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "end_date": {
            "format": "date",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "is_default": {
            "type": "boolean"
          },
          "list_type": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "start_date": {
            "format": "date",
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "name"
        ],
        "type": "object"
      },
      "PricingConditions": {
        "properties": {
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "is_active": {
            "type": "boolean"
          },
          "max_quantity": {
            "type": "number"
          },
          "min_quantity": {
            "type": "number"
          },
          "name": {
            "type": "string"
          },
          "priority": {
            "type": "integer"
          },
          "scope": {
            "type": "string"
          },
          "scope_id": {
            "format": "uuid",
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "valid_from": {
            "format": "date",
            "type": "string"
          },
          "valid_to": {
            "format": "date",
            "type": "string"
          },
          "value": {
            "type": "number"
          },
          "value_type": {
            "type": "string"
          }
        },
        "required": [
          "name",
          "type",
          "value_type"
        ],
        "type": "object"
      },
      "ProductionAlerts": {
        "properties": {
          "alert_type": {
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "message": {
            "type": "string"
          },
          "reference": {
            "type": "string"
          },
          "severity": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "ProductionConfirmations": {
        "properties": {
          "confirmed_at": {
            "format": "date-time",
            "type": "string"
          },
          "confirmed_by": {
            "format": "uuid",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "labor_cost": {
            "type": "number"
          },
          "labor_hours": {
            "type": "number"
          },
          "machine_hours": {
            "type": "number"
          },
          "manufacturing_order_id": {
            "format": "uuid",
            "type": "string"
          },
          "material_cost": {
            "type": "number"
          },
          "notes": {
            "type": "string"
          },
          "operation_name": {
            "type": "string"
          },
          "quantity_good": {
            "type": "number"
          },
          "quantity_rework": {
            "type": "number"
          },
          "quantity_scrap": {
            "type": "number"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "workstation_id": {
            "format": "uuid",
            "type": "string"
          }
        },
        "required": [
          "manufacturing_order_id"
        ],
        "type": "object"
      },
      "ProductionDashboardSummary": {
        "properties": {
          "active_employees_count": {
            "type": "integer"
          },
          "active_operations_count": {
            "type": "integer"
          },
          "active_orders_count": {
            "type": "integer"
          },
          "active_workstations_count": {
            "type": "integer"
          },
          "avg_duration_today": {
            "type": "number"
          },
          "avg_variance_today": {
            "type": "number"
          },
          "completed_today_count": {
            "type": "integer"
          },
          "operations_delayed_count": {
            "type": "integer"
          },
          "paused_operations_count": {
            "type": "integer"
          },
          "pending_operations_count": {
            "type": "integer"
          },
          "quality_checks_today": {
            "type": "integer"
          },
          "today_oee": {
            "type": "number"
          },
          "total_duration_today": {
            "type": "integer"
          }
        },
        "type": "object"
      },
      "ProductionMetrics": {
        "properties": {
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "cycle_time": {
            "type": "number"
          },
          "date": {
            "format": "date",
            "type": "string"
          },
          "defect_quantity": {
            "type": "number"
          },
          "downtime_minutes": {
            "type": "integer"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "manufacturing_order_id": {
            "format": "uuid",
            "type": "string"
          },
          "oee_availability": {
            "type": "number"
          },
          "oee_overall": {
            "type": "number"
          },
          "oee_performance": {
            "type": "number"
          },
          "oee_quality": {
            "type": "number"
          },
          "planned_quantity": {
            "type": "number"
          },
          "produced_quantity": {
            "type": "number"
          },
          "setup_time": {
            "type": "number"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "workstation_id": {
            "format": "uuid",
            "type": "string"
          }
        },
        "required": [
          "date"
        ],
        "type": "object"
      },
      "ProductionReleasePvSignatures": {
        "properties": {
          "comments": {
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "pv_id": {
            "format": "uuid",
            "type": "string"
          },
          "role": {
            "type": "string"
          },
          "signature_data": {
            "type": "string"
          },
          "signed_at": {
            "format": "date-time",
            "type": "string"
          },
          "signer_id": {
            "format": "uuid",
            "type": "string"
          },
          "signer_name": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "pv_id",
          "role"
        ],
        "type": "object"
      },
      "ProductionReleasePvs": {
        "properties": {
          "affair_id": {
            "format": "uuid",
            "type": "string"
          },
          "approved_at": {
            "format": "date-time",
            "type": "string"
          },
          "approved_by": {
            "format": "uuid",
            "type": "string"
          },
          "chantier_id": {
            "format": "uuid",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "created_by": {
            "format": "uuid",
            "type": "string"
          },
          "deleted_at": {
            "format": "date-time",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "manufacturing_order_id": {
            "format": "uuid",
            "type": "string"
          },
          "meeting_date": {
            "format": "date-time",
            "type": "string"
          },
          "observations_achats": {
            "type": "string"
          },
          "observations_be": {
            "type": "string"
          },
          "observations_production": {
            "type": "string"
          },
          "operation_sequence": {
            "type": "object"
          },
          "procurement_plan": {
            "type": "object"
          },
          "pv_number": {
            "type": "string"
          },
          "scanned_document_url": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "technical_sheet": {
            "type": "object"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "affair_id",
          "pv_number"
        ],
        "type": "object"
      },
      "ProductionReworkOrders": {
        "properties": {
          "assigned_to": {
            "format": "uuid",
            "type": "string"
          },
          "assigned_to_name": {
            "type": "string"
          },
          "completed_at": {
            "format": "date-time",
            "type": "string"
          },
          "cost_impact": {
            "type": "number"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "defect_type": {
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "manufacturing_order_id": {
            "format": "uuid",
            "type": "string"
          },
          "nc_reference": {
            "type": "string"
          },
          "notes": {
            "type": "string"
          },
          "priority": {
            "type": "string"
          },
          "quantity_reworked": {
            "type": "number"
          },
          "quantity_scrapped": {
            "type": "number"
          },
          "quantity_to_rework": {
            "type": "number"
          },
          "reason": {
            "type": "string"
          },
          "reference": {
            "type": "string"
          },
          "source_operation_id": {
            "format": "uuid",
            "type": "string"
          },
          "source_operation_name": {
            "type": "string"
          },
          "started_at": {
            "format": "date-time",
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "target_operation_id": {
            "format": "uuid",
            "type": "string"
          },
          "target_operation_name": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "manufacturing_order_id",
          "reference"
        ],
        "type": "object"
      },
      "Profiles": {
        "properties": {
          "avatar_url": {
            "type": "string"
          },
          "company_address": {
            "type": "string"
          },
          "company_email": {
            "type": "string"
          },
          "company_name": {
            "type": "string"
          },
          "company_phone": {
            "type": "string"
          },
          "country": {
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "currency": {
            "type": "string"
          },
          "department": {
            "type": "string"
          },
          "display_name": {
            "type": "string"
          },
          "email": {
            "type": "string"
          },
          "full_name": {
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "is_active": {
            "type": "boolean"
          },
          "last_sign_in_at": {
            "format": "date-time",
            "type": "string"
          },
          "phone": {
            "type": "string"
          },
          "preferences": {
            "type": "object"
          },
          "role": {
            "type": "string"
          },
          "tax_id": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "user_id": {
            "format": "uuid",
            "type": "string"
          }
        },
        "required": [
          "user_id"
        ],
        "type": "object"
      },
      "ProjectArticles": {
        "properties": {
          "article_id": {
            "format": "uuid",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "notes": {
            "type": "string"
          },
          "phase_id": {
            "format": "uuid",
            "type": "string"
          },
          "project_id": {
            "format": "uuid",
            "type": "string"
          },
          "quantity": {
            "type": "number"
          },
          "quantity_planned": {
            "type": "number"
          },
          "quantity_used": {
            "type": "number"
          },
          "unit_price": {
            "type": "number"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "type": "object"
      },
      "ProjectInstallations": {
        "properties": {
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "installation_date": {
            "format": "date",
            "type": "string"
          },
          "location": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "notes": {
            "type": "string"
          },
          "project_id": {
            "format": "uuid",
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "type": "object"
      },
      "ProjectPhases": {
        "properties": {
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "end_date": {
            "format": "date",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "position": {
            "type": "integer"
          },
          "progress": {
            "type": "integer"
          },
          "progress_percent": {
            "type": "integer"
          },
          "project_id": {
            "format": "uuid",
            "type": "string"
          },
          "sequence": {
            "type": "integer"
          },
          "start_date": {
            "format": "date",
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "name"
        ],
        "type": "object"
      },
      "ProjectTasks": {
        "properties": {
          "actual_hours": {
            "type": "number"
          },
          "assigned_to": {
            "format": "uuid",
            "type": "string"
          },
          "completed_at": {
            "format": "date-time",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "due_date": {
            "format": "date",
            "type": "string"
          },
          "estimated_hours": {
            "type": "number"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "phase_id": {
            "format": "uuid",
            "type": "string"
          },
          "priority": {
            "type": "string"
          },
          "project_id": {
            "format": "uuid",
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "title"
        ],
        "type": "object"
      },
      "ProjectTools": {
        "properties": {
          "assigned_to": {
            "format": "uuid",
            "type": "string"
          },
          "category": {
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "date_assigned": {
            "format": "date",
            "type": "string"
          },
          "date_returned": {
            "format": "date",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "notes": {
            "type": "string"
          },
          "project_id": {
            "format": "uuid",
            "type": "string"
          },
          "quantity": {
            "type": "integer"
          },
          "serial_number": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "name"
        ],
        "type": "object"
      },
      "Projects": {
        "properties": {
          "budget_actual": {
            "type": "number"
          },
          "budget_estimated": {
            "type": "number"
          },
          "chef_chantier_id": {
            "format": "uuid",
            "type": "string"
          },
          "client_id": {
            "format": "uuid",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "created_by": {
            "format": "uuid",
            "type": "string"
          },
          "deleted_at": {
            "format": "date-time",
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "end_date_actual": {
            "format": "date",
            "type": "string"
          },
          "end_date_planned": {
            "format": "date",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "progress_percent": {
            "type": "integer"
          },
          "project_type": {
            "type": "string"
          },
          "reference": {
            "type": "string"
          },
          "start_date_actual": {
            "format": "date",
            "type": "string"
          },
          "start_date_planned": {
            "format": "date",
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "updated_by": {
            "format": "uuid",
            "type": "string"
          }
        },
        "required": [
          "name",
          "reference"
        ],
        "type": "object"
      },
      "PurchaseContractItems": {
        "properties": {
          "article_id": {
            "format": "uuid",
            "type": "string"
          },
          "contract_id": {
            "format": "uuid",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "quantity": {
            "type": "number"
          },
          "total": {
            "type": "number"
          },
          "unit_price": {
            "type": "number"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "contract_id"
        ],
        "type": "object"
      },
      "PurchaseContracts": {
        "properties": {
          "auto_renew": {
            "type": "boolean"
          },
          "consumed_value": {
            "type": "number"
          },
          "contract_number": {
            "type": "string"
          },
          "contract_type": {
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "created_by": {
            "format": "uuid",
            "type": "string"
          },
          "end_date": {
            "format": "date",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "max_order_value": {
            "type": "number"
          },
          "min_order_value": {
            "type": "number"
          },
          "notes": {
            "type": "string"
          },
          "payment_terms": {
            "type": "string"
          },
          "start_date": {
            "format": "date",
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "supplier_id": {
            "format": "uuid",
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "total_value": {
            "type": "number"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "contract_number",
          "end_date",
          "start_date",
          "title"
        ],
        "type": "object"
      },
      "PurchaseOrderItems": {
        "properties": {
          "article_id": {
            "format": "uuid",
            "type": "string"
          },
          "delivery_completed": {
            "type": "boolean"
          },
          "description": {
            "type": "string"
          },
          "dim1_value_id": {
            "format": "uuid",
            "type": "string"
          },
          "dim2_value_id": {
            "format": "uuid",
            "type": "string"
          },
          "dim_set": {
            "type": "object"
          },
          "discount_rate": {
            "type": "number"
          },
          "discount_type": {
            "type": "string"
          },
          "fodec_rate": {
            "type": "number"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "position": {
            "type": "integer"
          },
          "purchase_order_id": {
            "format": "uuid",
            "type": "string"
          },
          "quantity": {
            "type": "number"
          },
          "quantity_cancelled": {
            "type": "number"
          },
          "quantity_original": {
            "type": "number"
          },
          "quantity_rejected": {
            "type": "number"
          },
          "received_quantity": {
            "type": "number"
          },
          "source_da_item_id": {
            "format": "uuid",
            "type": "string"
          },
          "tax_rate": {
            "type": "number"
          },
          "total": {
            "type": "number"
          },
          "unit_price": {
            "type": "number"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "purchase_order_id",
          "quantity",
          "unit_price"
        ],
        "type": "object"
      },
      "PurchaseOrders": {
        "properties": {
          "actual_delivery_date": {
            "format": "date",
            "type": "string"
          },
          "affair_id": {
            "format": "uuid",
            "type": "string"
          },
          "approved_by": {
            "format": "uuid",
            "type": "string"
          },
          "archived_at": {
            "format": "date-time",
            "type": "string"
          },
          "archived_by": {
            "format": "uuid",
            "type": "string"
          },
          "budget_code": {
            "type": "string"
          },
          "cost_center": {
            "type": "string"
          },
          "cost_center_local": {
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "created_by": {
            "format": "uuid",
            "type": "string"
          },
          "date": {
            "format": "date-time",
            "type": "string"
          },
          "deleted_at": {
            "format": "date-time",
            "type": "string"
          },
          "delivery_status": {
            "type": "string"
          },
          "destination_type": {
            "type": "string"
          },
          "dim1_value_id": {
            "format": "uuid",
            "type": "string"
          },
          "dim2_value_id": {
            "format": "uuid",
            "type": "string"
          },
          "dim_set": {
            "type": "object"
          },
          "expected_date": {
            "format": "date-time",
            "type": "string"
          },
          "expected_delivery_date": {
            "format": "date",
            "type": "string"
          },
          "gr_ir_cleared_at": {
            "format": "date-time",
            "type": "string"
          },
          "gr_ir_cleared_by": {
            "format": "uuid",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "matched_at": {
            "format": "date-time",
            "type": "string"
          },
          "matched_by": {
            "format": "uuid",
            "type": "string"
          },
          "notes": {
            "type": "string"
          },
          "number": {
            "type": "string"
          },
          "purchase_contract_id": {
            "format": "uuid",
            "type": "string"
          },
          "purchase_request_id": {
            "format": "uuid",
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "subtotal": {
            "type": "number"
          },
          "supplier_id": {
            "format": "uuid",
            "type": "string"
          },
          "supplier_order_ref": {
            "type": "string"
          },
          "supplier_reference": {
            "type": "string"
          },
          "supplier_rfq_id": {
            "format": "uuid",
            "type": "string"
          },
          "tax_amount": {
            "type": "number"
          },
          "total": {
            "type": "number"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "updated_by": {
            "format": "uuid",
            "type": "string"
          },
          "warehouse_id": {
            "format": "uuid",
            "type": "string"
          }
        },
        "required": [
          "number"
        ],
        "type": "object"
      },
      "PurchaseRequestItems": {
        "properties": {
          "article_id": {
            "format": "uuid",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "current_stock": {
            "type": "number"
          },
          "description": {
            "type": "string"
          },
          "dim1_value_id": {
            "format": "uuid",
            "type": "string"
          },
          "dim2_value_id": {
            "format": "uuid",
            "type": "string"
          },
          "dim_set": {
            "type": "object"
          },
          "estimated_unit_price": {
            "type": "number"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "notes": {
            "type": "string"
          },
          "position": {
            "type": "integer"
          },
          "purchase_price": {
            "type": "number"
          },
          "purchase_request_id": {
            "format": "uuid",
            "type": "string"
          },
          "quantity": {
            "type": "number"
          },
          "quantity_cancelled": {
            "type": "number"
          },
          "quantity_ordered": {
            "type": "number"
          },
          "quantity_original": {
            "type": "number"
          },
          "quantity_received": {
            "type": "number"
          },
          "quantity_rejected": {
            "type": "number"
          },
          "source_item_id": {
            "format": "uuid",
            "type": "string"
          },
          "specifications": {
            "type": "string"
          },
          "supplier_discount": {
            "type": "number"
          },
          "tva_rate": {
            "type": "number"
          },
          "unit": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "purchase_request_id"
        ],
        "type": "object"
      },
      "PurchaseRequests": {
        "properties": {
          "affair_id": {
            "format": "uuid",
            "type": "string"
          },
          "amendment_reason": {
            "type": "string"
          },
          "amendment_type": {
            "type": "string"
          },
          "approved_at": {
            "format": "date-time",
            "type": "string"
          },
          "approved_by": {
            "format": "uuid",
            "type": "string"
          },
          "archived_at": {
            "format": "date-time",
            "type": "string"
          },
          "archived_by": {
            "format": "uuid",
            "type": "string"
          },
          "be_content_locked": {
            "type": "boolean"
          },
          "budget_code": {
            "type": "string"
          },
          "chantier_id": {
            "format": "uuid",
            "type": "string"
          },
          "cost_center": {
            "type": "string"
          },
          "cost_center_local": {
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "deleted_at": {
            "format": "date-time",
            "type": "string"
          },
          "department": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "destination_type": {
            "type": "string"
          },
          "dim1_value_id": {
            "format": "uuid",
            "type": "string"
          },
          "dim2_value_id": {
            "format": "uuid",
            "type": "string"
          },
          "dim_set": {
            "type": "object"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "manufacturing_order_id": {
            "format": "uuid",
            "type": "string"
          },
          "mrp_run_id": {
            "format": "uuid",
            "type": "string"
          },
          "notes": {
            "type": "string"
          },
          "parent_request_id": {
            "format": "uuid",
            "type": "string"
          },
          "priority": {
            "type": "string"
          },
          "project_id": {
            "format": "uuid",
            "type": "string"
          },
          "project_ref_id": {
            "format": "uuid",
            "type": "string"
          },
          "purchase_order_id": {
            "format": "uuid",
            "type": "string"
          },
          "rejection_reason": {
            "type": "string"
          },
          "request_kind": {
            "type": "string"
          },
          "request_number": {
            "type": "string"
          },
          "requester_id": {
            "format": "uuid",
            "type": "string"
          },
          "required_date": {
            "format": "date-time",
            "type": "string"
          },
          "reviewed_at": {
            "format": "date-time",
            "type": "string"
          },
          "reviewed_by": {
            "format": "uuid",
            "type": "string"
          },
          "rfq_id": {
            "format": "uuid",
            "type": "string"
          },
          "root_request_id": {
            "format": "uuid",
            "type": "string"
          },
          "source_po_id": {
            "format": "uuid",
            "type": "string"
          },
          "source_reception_id": {
            "format": "uuid",
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "submitted_at": {
            "format": "date-time",
            "type": "string"
          },
          "supplier_id": {
            "format": "uuid",
            "type": "string"
          },
          "technical_study_id": {
            "format": "uuid",
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "warehouse_id": {
            "format": "uuid",
            "type": "string"
          }
        },
        "required": [
          "request_number",
          "title"
        ],
        "type": "object"
      },
      "QualityCertificates": {
        "properties": {
          "batch_number": {
            "type": "string"
          },
          "certificate_number": {
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "created_by": {
            "format": "uuid",
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "expiry_date": {
            "format": "date",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "inspector": {
            "type": "string"
          },
          "issue_date": {
            "format": "date",
            "type": "string"
          },
          "notes": {
            "type": "string"
          },
          "product_name": {
            "type": "string"
          },
          "reference_standards": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "supplier_name": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "certificate_number",
          "title"
        ],
        "type": "object"
      },
      "QualityControlCriteria": {
        "properties": {
          "control_method": {
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "criteria_name": {
            "type": "string"
          },
          "criteria_type": {
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "is_critical": {
            "type": "boolean"
          },
          "max_value": {
            "type": "number"
          },
          "measurement_tool": {
            "type": "string"
          },
          "min_value": {
            "type": "number"
          },
          "plan_id": {
            "format": "uuid",
            "type": "string"
          },
          "reaction_plan": {
            "type": "string"
          },
          "sample_size": {
            "type": "integer"
          },
          "sequence": {
            "type": "integer"
          },
          "target_value": {
            "type": "number"
          },
          "unit": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "criteria_name"
        ],
        "type": "object"
      },
      "QualityControlPlans": {
        "properties": {
          "article_id": {
            "format": "uuid",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "frequency": {
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "is_active": {
            "type": "boolean"
          },
          "name": {
            "type": "string"
          },
          "operation_type": {
            "type": "string"
          },
          "plan_number": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "name"
        ],
        "type": "object"
      },
      "QualityControls": {
        "properties": {
          "article_id": {
            "format": "uuid",
            "type": "string"
          },
          "control_number": {
            "type": "string"
          },
          "control_type": {
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "inspection_date": {
            "format": "date",
            "type": "string"
          },
          "inspector_id": {
            "format": "uuid",
            "type": "string"
          },
          "instrument_id": {
            "format": "uuid",
            "type": "string"
          },
          "manufacturing_order_id": {
            "format": "uuid",
            "type": "string"
          },
          "measurements": {
            "type": "object"
          },
          "notes": {
            "type": "string"
          },
          "result": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "type": "object"
      },
      "QualityTrackingRecords": {
        "properties": {
          "closed_at": {
            "format": "date-time",
            "type": "string"
          },
          "content": {
            "type": "object"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "deleted_at": {
            "format": "date-time",
            "type": "string"
          },
          "due_date": {
            "format": "date",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "manufacturing_order_id": {
            "format": "uuid",
            "type": "string"
          },
          "nc_id": {
            "format": "uuid",
            "type": "string"
          },
          "notes": {
            "type": "string"
          },
          "number": {
            "type": "string"
          },
          "owner_name": {
            "type": "string"
          },
          "record_type": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "number",
          "record_type",
          "title"
        ],
        "type": "object"
      },
      "QuoteApprovals": {
        "properties": {
          "approval_level": {
            "type": "integer"
          },
          "approved_at": {
            "format": "date-time",
            "type": "string"
          },
          "approver_id": {
            "format": "uuid",
            "type": "string"
          },
          "comment": {
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "quote_id": {
            "format": "uuid",
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "quote_id"
        ],
        "type": "object"
      },
      "QuoteItems": {
        "properties": {
          "article_id": {
            "format": "uuid",
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "dim1_value_id": {
            "format": "uuid",
            "type": "string"
          },
          "dim2_value_id": {
            "format": "uuid",
            "type": "string"
          },
          "dim_set": {
            "type": "object"
          },
          "discount": {
            "type": "number"
          },
          "discount_2": {
            "type": "number"
          },
          "discount_2_type": {
            "type": "string"
          },
          "discount_type": {
            "type": "string"
          },
          "fodec_rate": {
            "type": "number"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "line_type": {
            "type": "string"
          },
          "manufacturing_order_id": {
            "format": "uuid",
            "type": "string"
          },
          "needs_manufacturing": {
            "type": "boolean"
          },
          "parent_section_id": {
            "format": "uuid",
            "type": "string"
          },
          "position": {
            "type": "integer"
          },
          "quantity": {
            "type": "number"
          },
          "quote_id": {
            "format": "uuid",
            "type": "string"
          },
          "service_type": {
            "type": "string"
          },
          "sort_order": {
            "type": "integer"
          },
          "tax_rate": {
            "type": "number"
          },
          "total": {
            "type": "number"
          },
          "unit": {
            "type": "string"
          },
          "unit_price": {
            "type": "number"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "quantity",
          "quote_id",
          "unit_price"
        ],
        "type": "object"
      },
      "Quotes": {
        "properties": {
          "affair_id": {
            "format": "uuid",
            "type": "string"
          },
          "approved_at": {
            "format": "date-time",
            "type": "string"
          },
          "approved_by": {
            "format": "uuid",
            "type": "string"
          },
          "archived_at": {
            "format": "date-time",
            "type": "string"
          },
          "archived_by": {
            "format": "uuid",
            "type": "string"
          },
          "client_id": {
            "format": "uuid",
            "type": "string"
          },
          "contact_id": {
            "format": "uuid",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "created_by": {
            "format": "uuid",
            "type": "string"
          },
          "currency": {
            "type": "string"
          },
          "date": {
            "format": "date-time",
            "type": "string"
          },
          "deleted_at": {
            "format": "date-time",
            "type": "string"
          },
          "delivery_address": {
            "type": "string"
          },
          "dim1_value_id": {
            "format": "uuid",
            "type": "string"
          },
          "dim2_value_id": {
            "format": "uuid",
            "type": "string"
          },
          "dim_set": {
            "type": "object"
          },
          "discount": {
            "type": "number"
          },
          "discount_2": {
            "type": "number"
          },
          "discount_2_type": {
            "type": "string"
          },
          "discount_type": {
            "type": "string"
          },
          "exchange_rate": {
            "type": "number"
          },
          "fodec_amount": {
            "type": "number"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "incoterms": {
            "type": "string"
          },
          "notes": {
            "type": "string"
          },
          "number": {
            "type": "string"
          },
          "opportunity_id": {
            "format": "uuid",
            "type": "string"
          },
          "payment_method": {
            "type": "string"
          },
          "payment_term_id": {
            "format": "uuid",
            "type": "string"
          },
          "quote_number": {
            "type": "string"
          },
          "source_chiffrage_name": {
            "type": "string"
          },
          "stamp_duty": {
            "type": "number"
          },
          "status": {
            "type": "string"
          },
          "subject": {
            "type": "string"
          },
          "subtotal": {
            "type": "number"
          },
          "tax_amount": {
            "type": "number"
          },
          "technical_study_id": {
            "format": "uuid",
            "type": "string"
          },
          "terms": {
            "type": "string"
          },
          "total": {
            "type": "number"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "updated_by": {
            "format": "uuid",
            "type": "string"
          },
          "valid_until": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "number"
        ],
        "type": "object"
      },
      "ReceptionItems": {
        "properties": {
          "article_id": {
            "format": "uuid",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "dim1_value_id": {
            "format": "uuid",
            "type": "string"
          },
          "dim2_value_id": {
            "format": "uuid",
            "type": "string"
          },
          "dim_set": {
            "type": "object"
          },
          "discount_rate": {
            "type": "number"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "location_id": {
            "format": "uuid",
            "type": "string"
          },
          "lot_number": {
            "type": "string"
          },
          "ordered_qty": {
            "type": "number"
          },
          "quality_status": {
            "type": "string"
          },
          "quantity_rejected": {
            "type": "number"
          },
          "received_qty": {
            "type": "number"
          },
          "reception_id": {
            "format": "uuid",
            "type": "string"
          },
          "serial_number": {
            "type": "string"
          },
          "tax_rate": {
            "type": "number"
          },
          "total_ht": {
            "type": "number"
          },
          "total_ttc": {
            "type": "number"
          },
          "unit": {
            "type": "string"
          },
          "unit_price": {
            "type": "number"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "warehouse_id": {
            "format": "uuid",
            "type": "string"
          }
        },
        "required": [
          "received_qty",
          "reception_id"
        ],
        "type": "object"
      },
      "Receptions": {
        "properties": {
          "affair_id": {
            "format": "uuid",
            "type": "string"
          },
          "archived_at": {
            "format": "date-time",
            "type": "string"
          },
          "archived_by": {
            "format": "uuid",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "created_by": {
            "format": "uuid",
            "type": "string"
          },
          "dim1_value_id": {
            "format": "uuid",
            "type": "string"
          },
          "dim2_value_id": {
            "format": "uuid",
            "type": "string"
          },
          "dim_set": {
            "type": "object"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "notes": {
            "type": "string"
          },
          "purchase_order_id": {
            "format": "uuid",
            "type": "string"
          },
          "received_by": {
            "type": "string"
          },
          "reception_date": {
            "format": "date-time",
            "type": "string"
          },
          "reception_number": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "supplier_bl": {
            "type": "string"
          },
          "supplier_id": {
            "format": "uuid",
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "warehouse_id": {
            "format": "uuid",
            "type": "string"
          }
        },
        "required": [
          "reception_number"
        ],
        "type": "object"
      },
      "RecurringInvoices": {
        "properties": {
          "client_id": {
            "format": "uuid",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "end_date": {
            "format": "date",
            "type": "string"
          },
          "frequency": {
            "type": "string"
          },
          "generated_count": {
            "type": "integer"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "label": {
            "type": "string"
          },
          "last_invoice_id": {
            "format": "uuid",
            "type": "string"
          },
          "last_run_at": {
            "format": "date-time",
            "type": "string"
          },
          "next_run": {
            "format": "date",
            "type": "string"
          },
          "start_date": {
            "format": "date",
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "template": {
            "type": "object"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "client_id",
          "frequency",
          "label",
          "next_run",
          "start_date"
        ],
        "type": "object"
      },
      "Returns": {
        "properties": {
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "entity_id": {
            "format": "uuid",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "reason": {
            "type": "string"
          },
          "return_number": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "total": {
            "type": "number"
          },
          "type": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "type"
        ],
        "type": "object"
      },
      "ReviewActions": {
        "properties": {
          "category": {
            "type": "string"
          },
          "completed_at": {
            "format": "date-time",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "due_date": {
            "format": "date",
            "type": "string"
          },
          "evidence": {
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "priority": {
            "type": "string"
          },
          "responsible_id": {
            "format": "uuid",
            "type": "string"
          },
          "responsible_name": {
            "type": "string"
          },
          "review_id": {
            "format": "uuid",
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "category",
          "description",
          "review_id"
        ],
        "type": "object"
      },
      "RiskAssessments": {
        "properties": {
          "asset": {
            "type": "string"
          },
          "category": {
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "impact": {
            "type": "integer"
          },
          "likelihood": {
            "type": "integer"
          },
          "owner": {
            "type": "string"
          },
          "review_date": {
            "format": "date-time",
            "type": "string"
          },
          "risk_code": {
            "type": "string"
          },
          "risk_level": {
            "type": "integer"
          },
          "status": {
            "type": "string"
          },
          "threat": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "treatment": {
            "type": "string"
          },
          "treatment_plan": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "vulnerability": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "Roles": {
        "properties": {
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "display_name": {
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "is_active": {
            "type": "boolean"
          },
          "is_system": {
            "type": "boolean"
          },
          "name": {
            "type": "string"
          },
          "permissions": {
            "type": "object"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "name"
        ],
        "type": "object"
      },
      "RoutingOperations": {
        "properties": {
          "actual_time_minutes": {
            "type": "number"
          },
          "bom_id": {
            "format": "uuid",
            "type": "string"
          },
          "completed_at": {
            "format": "date-time",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "manufacturing_order_id": {
            "format": "uuid",
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "notes": {
            "type": "string"
          },
          "operation_number": {
            "type": "integer"
          },
          "operator_id": {
            "format": "uuid",
            "type": "string"
          },
          "quality_check_passed": {
            "type": "boolean"
          },
          "quality_check_required": {
            "type": "boolean"
          },
          "setup_time_minutes": {
            "type": "number"
          },
          "standard_time_minutes": {
            "type": "number"
          },
          "started_at": {
            "format": "date-time",
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "workstation_id": {
            "format": "uuid",
            "type": "string"
          }
        },
        "required": [
          "name",
          "operation_number"
        ],
        "type": "object"
      },
      "RuleParameters": {
        "properties": {
          "active": {
            "type": "boolean"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "created_by": {
            "format": "uuid",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "params": {
            "type": "object"
          },
          "rule_type": {
            "type": "string"
          },
          "scope_id": {
            "format": "uuid",
            "type": "string"
          },
          "scope_type": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "rule_type"
        ],
        "type": "object"
      },
      "SalesOrderItems": {
        "properties": {
          "article_id": {
            "format": "uuid",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "ctp_date": {
            "format": "date",
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "dim1_value_id": {
            "format": "uuid",
            "type": "string"
          },
          "dim2_value_id": {
            "format": "uuid",
            "type": "string"
          },
          "dim_set": {
            "type": "object"
          },
          "discount_2": {
            "type": "number"
          },
          "discount_2_type": {
            "type": "string"
          },
          "discount_percent": {
            "type": "number"
          },
          "fodec_rate": {
            "type": "number"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "line_total": {
            "type": "number"
          },
          "position": {
            "type": "integer"
          },
          "promised_date": {
            "format": "date",
            "type": "string"
          },
          "quantity": {
            "type": "number"
          },
          "quote_item_id": {
            "format": "uuid",
            "type": "string"
          },
          "reserved_qty": {
            "type": "number"
          },
          "sales_order_id": {
            "format": "uuid",
            "type": "string"
          },
          "tax_rate": {
            "type": "number"
          },
          "tax_rate_id": {
            "format": "uuid",
            "type": "string"
          },
          "unit_price": {
            "type": "number"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "warehouse_id": {
            "format": "uuid",
            "type": "string"
          }
        },
        "required": [
          "sales_order_id",
          "unit_price"
        ],
        "type": "object"
      },
      "SalesOrders": {
        "properties": {
          "affair_id": {
            "format": "uuid",
            "type": "string"
          },
          "archived_at": {
            "format": "date-time",
            "type": "string"
          },
          "archived_by": {
            "format": "uuid",
            "type": "string"
          },
          "billing_address": {
            "type": "string"
          },
          "client_id": {
            "format": "uuid",
            "type": "string"
          },
          "confirmed_delivery_date": {
            "format": "date",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "created_by": {
            "format": "uuid",
            "type": "string"
          },
          "currency": {
            "type": "string"
          },
          "customer_po": {
            "type": "string"
          },
          "deleted_at": {
            "format": "date-time",
            "type": "string"
          },
          "delivered_quantity": {
            "type": "number"
          },
          "delivery_date": {
            "format": "date",
            "type": "string"
          },
          "dim1_value_id": {
            "format": "uuid",
            "type": "string"
          },
          "dim2_value_id": {
            "format": "uuid",
            "type": "string"
          },
          "dim_set": {
            "type": "object"
          },
          "discount_2": {
            "type": "number"
          },
          "discount_2_type": {
            "type": "string"
          },
          "discount_amount": {
            "type": "number"
          },
          "fodec_amount": {
            "type": "number"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "invoiced_amount": {
            "type": "number"
          },
          "notes": {
            "type": "string"
          },
          "order_date": {
            "format": "date",
            "type": "string"
          },
          "order_number": {
            "type": "string"
          },
          "payment_term_id": {
            "format": "uuid",
            "type": "string"
          },
          "priority": {
            "type": "string"
          },
          "quote_id": {
            "format": "uuid",
            "type": "string"
          },
          "requested_delivery_date": {
            "format": "date",
            "type": "string"
          },
          "shipping_address": {
            "type": "string"
          },
          "source": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "subtotal": {
            "type": "number"
          },
          "tax_total": {
            "type": "number"
          },
          "total": {
            "type": "number"
          },
          "total_amount": {
            "type": "number"
          },
          "tva_amount": {
            "type": "number"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "warehouse_id": {
            "format": "uuid",
            "type": "string"
          }
        },
        "required": [
          "order_number"
        ],
        "type": "object"
      },
      "SamedChecklists": {
        "properties": {
          "area": {
            "type": "string"
          },
          "context_id": {
            "type": "string"
          },
          "context_type": {
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "deleted_at": {
            "format": "date-time",
            "type": "string"
          },
          "documentation_comment": {
            "type": "string"
          },
          "documentation_ok": {
            "type": "boolean"
          },
          "equipment_comment": {
            "type": "string"
          },
          "equipment_ok": {
            "type": "boolean"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "items": {
            "type": "object"
          },
          "last_checked": {
            "format": "date-time",
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "overall_status": {
            "type": "string"
          },
          "security_comment": {
            "type": "string"
          },
          "security_ok": {
            "type": "boolean"
          },
          "status": {
            "type": "string"
          },
          "supply_comment": {
            "type": "string"
          },
          "supply_ok": {
            "type": "boolean"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "validated_at": {
            "format": "date-time",
            "type": "string"
          },
          "workforce_comment": {
            "type": "string"
          },
          "workforce_ok": {
            "type": "boolean"
          }
        },
        "required": [
          "name"
        ],
        "type": "object"
      },
      "SecurityIncidents": {
        "properties": {
          "category": {
            "type": "string"
          },
          "containment": {
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "eradication": {
            "type": "string"
          },
          "handler_id": {
            "format": "uuid",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "impact": {
            "type": "string"
          },
          "incident_number": {
            "type": "string"
          },
          "lessons_learned": {
            "type": "string"
          },
          "recovery": {
            "type": "string"
          },
          "reported_at": {
            "format": "date-time",
            "type": "string"
          },
          "reporter_id": {
            "format": "uuid",
            "type": "string"
          },
          "resolved_at": {
            "format": "date-time",
            "type": "string"
          },
          "severity": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "incident_number",
          "title"
        ],
        "type": "object"
      },
      "SensitiveFields": {
        "properties": {
          "active": {
            "type": "boolean"
          },
          "column_name": {
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "created_by": {
            "format": "uuid",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "table_name": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "column_name",
          "table_name"
        ],
        "type": "object"
      },
      "ServiceContracts": {
        "properties": {
          "annual_cost": {
            "type": "number"
          },
          "annual_fee": {
            "type": "number"
          },
          "auto_renew": {
            "type": "boolean"
          },
          "client_id": {
            "format": "uuid",
            "type": "string"
          },
          "contract_number": {
            "type": "string"
          },
          "coverage": {
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "end_date": {
            "format": "date",
            "type": "string"
          },
          "equipment_id": {
            "format": "uuid",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "includes_labor": {
            "type": "boolean"
          },
          "includes_parts": {
            "type": "boolean"
          },
          "max_interventions_year": {
            "type": "integer"
          },
          "monthly_fee": {
            "type": "number"
          },
          "name": {
            "type": "string"
          },
          "notes": {
            "type": "string"
          },
          "provider": {
            "type": "string"
          },
          "response_time_hours": {
            "type": "integer"
          },
          "sla_resolution_hours": {
            "type": "integer"
          },
          "sla_response_hours": {
            "type": "integer"
          },
          "start_date": {
            "format": "date",
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "name"
        ],
        "type": "object"
      },
      "SizeColorMatrices": {
        "properties": {
          "article_reference": {
            "type": "string"
          },
          "colors": {
            "type": "object"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "notes": {
            "type": "string"
          },
          "quantities": {
            "type": "object"
          },
          "reference": {
            "type": "string"
          },
          "sizes": {
            "type": "object"
          },
          "status": {
            "type": "string"
          },
          "total_quantity": {
            "type": "integer"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "name"
        ],
        "type": "object"
      },
      "SmedOperations": {
        "properties": {
          "can_externalize": {
            "type": "boolean"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "current_duration": {
            "type": "integer"
          },
          "current_type": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "duration": {
            "type": "integer"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "improved_duration": {
            "type": "integer"
          },
          "improved_type": {
            "type": "string"
          },
          "improvement": {
            "type": "string"
          },
          "improvement_action": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "new_duration": {
            "type": "integer"
          },
          "operation_type": {
            "type": "string"
          },
          "position": {
            "type": "integer"
          },
          "sequence": {
            "type": "integer"
          },
          "smed_study_id": {
            "format": "uuid",
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "smed_study_id"
        ],
        "type": "object"
      },
      "SmedStudies": {
        "properties": {
          "achieved_changeover_time": {
            "type": "integer"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "created_by": {
            "format": "uuid",
            "type": "string"
          },
          "current_changeover_time": {
            "type": "integer"
          },
          "deleted_at": {
            "format": "date-time",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "reduction_percentage": {
            "type": "number"
          },
          "status": {
            "type": "string"
          },
          "target_changeover_time": {
            "type": "integer"
          },
          "title": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "workstation_id": {
            "format": "uuid",
            "type": "string"
          }
        },
        "required": [
          "name"
        ],
        "type": "object"
      },
      "SpareParts": {
        "properties": {
          "article_id": {
            "format": "uuid",
            "type": "string"
          },
          "category": {
            "type": "string"
          },
          "code": {
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "current_stock": {
            "type": "number"
          },
          "description": {
            "type": "string"
          },
          "equipment_id": {
            "format": "uuid",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "location": {
            "type": "string"
          },
          "location_code": {
            "type": "string"
          },
          "min_quantity": {
            "type": "number"
          },
          "min_stock": {
            "type": "number"
          },
          "name": {
            "type": "string"
          },
          "reference": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "stock_quantity": {
            "type": "number"
          },
          "supplier_id": {
            "format": "uuid",
            "type": "string"
          },
          "unit_price": {
            "type": "number"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "type": "object"
      },
      "SpcMeasurements": {
        "properties": {
          "characteristic": {
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "created_by": {
            "format": "uuid",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "instrument_id": {
            "format": "uuid",
            "type": "string"
          },
          "operator": {
            "type": "string"
          },
          "sample_group": {
            "type": "integer"
          },
          "timestamp": {
            "format": "date-time",
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "value": {
            "type": "number"
          }
        },
        "type": "object"
      },
      "StatusProfileAssignments": {
        "properties": {
          "active": {
            "type": "boolean"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "created_by": {
            "format": "uuid",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "profile_id": {
            "format": "uuid",
            "type": "string"
          },
          "scope_id": {
            "format": "uuid",
            "type": "string"
          },
          "scope_type": {
            "type": "string"
          },
          "table_name": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "profile_id",
          "table_name"
        ],
        "type": "object"
      },
      "StatusProfiles": {
        "properties": {
          "active": {
            "type": "boolean"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "created_by": {
            "format": "uuid",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "roles_par_transition": {
            "type": "object"
          },
          "table_name": {
            "type": "string"
          },
          "transitions": {
            "type": "object"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "name",
          "table_name"
        ],
        "type": "object"
      },
      "StockAdjustments": {
        "properties": {
          "adjustment_type": {
            "type": "string"
          },
          "approved_by": {
            "format": "uuid",
            "type": "string"
          },
          "article_id": {
            "format": "uuid",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "created_by": {
            "format": "uuid",
            "type": "string"
          },
          "difference": {
            "type": "number"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "location_id": {
            "format": "uuid",
            "type": "string"
          },
          "new_quantity": {
            "type": "number"
          },
          "previous_quantity": {
            "type": "number"
          },
          "reason": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "adjustment_type",
          "article_id"
        ],
        "type": "object"
      },
      "StockMovements": {
        "properties": {
          "affair_id": {
            "format": "uuid",
            "type": "string"
          },
          "article_id": {
            "format": "uuid",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "created_by": {
            "format": "uuid",
            "type": "string"
          },
          "dim1_value_id": {
            "format": "uuid",
            "type": "string"
          },
          "dim2_value_id": {
            "format": "uuid",
            "type": "string"
          },
          "dim_set": {
            "type": "object"
          },
          "from_location_id": {
            "format": "uuid",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "lot_number": {
            "type": "string"
          },
          "movement_type": {
            "type": "string"
          },
          "notes": {
            "type": "string"
          },
          "quantity": {
            "type": "number"
          },
          "reference_id": {
            "format": "uuid",
            "type": "string"
          },
          "reference_type": {
            "type": "string"
          },
          "to_location_id": {
            "format": "uuid",
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "unit_cost": {
            "type": "number"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "version": {
            "type": "integer"
          },
          "warehouse_id": {
            "format": "uuid",
            "type": "string"
          }
        },
        "required": [
          "article_id",
          "quantity",
          "type"
        ],
        "type": "object"
      },
      "StockReservations": {
        "properties": {
          "article_id": {
            "format": "uuid",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "created_by": {
            "format": "uuid",
            "type": "string"
          },
          "expires_at": {
            "format": "date-time",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "quantity": {
            "type": "number"
          },
          "source_id": {
            "format": "uuid",
            "type": "string"
          },
          "source_type": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "warehouse_id": {
            "format": "uuid",
            "type": "string"
          }
        },
        "required": [
          "article_id",
          "quantity",
          "source_id",
          "source_type",
          "warehouse_id"
        ],
        "type": "object"
      },
      "StockTransferLines": {
        "properties": {
          "article_id": {
            "format": "uuid",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "lot_id": {
            "format": "uuid",
            "type": "string"
          },
          "quantity": {
            "type": "number"
          },
          "transfer_id": {
            "format": "uuid",
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "quantity",
          "transfer_id"
        ],
        "type": "object"
      },
      "StockTransfers": {
        "properties": {
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "created_by": {
            "format": "uuid",
            "type": "string"
          },
          "from_warehouse_id": {
            "format": "uuid",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "notes": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "to_warehouse_id": {
            "format": "uuid",
            "type": "string"
          },
          "transfer_date": {
            "format": "date",
            "type": "string"
          },
          "transfer_number": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "transfer_number"
        ],
        "type": "object"
      },
      "SubcontractingOrderLines": {
        "properties": {
          "article_id": {
            "format": "uuid",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "dim1_value_id": {
            "format": "uuid",
            "type": "string"
          },
          "dim2_value_id": {
            "format": "uuid",
            "type": "string"
          },
          "dim_set": {
            "type": "object"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "line_number": {
            "type": "integer"
          },
          "line_total": {
            "type": "number"
          },
          "order_id": {
            "format": "uuid",
            "type": "string"
          },
          "quantity": {
            "type": "number"
          },
          "unit": {
            "type": "string"
          },
          "unit_price": {
            "type": "number"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "description",
          "order_id",
          "quantity"
        ],
        "type": "object"
      },
      "SubcontractingOrders": {
        "properties": {
          "affair_id": {
            "format": "uuid",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "dim1_value_id": {
            "format": "uuid",
            "type": "string"
          },
          "dim2_value_id": {
            "format": "uuid",
            "type": "string"
          },
          "dim_set": {
            "type": "object"
          },
          "due_date": {
            "format": "date",
            "type": "string"
          },
          "expected_date": {
            "format": "date",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "manufacturing_order_id": {
            "format": "uuid",
            "type": "string"
          },
          "notes": {
            "type": "string"
          },
          "order_number": {
            "type": "string"
          },
          "quantity_received": {
            "type": "number"
          },
          "quantity_sent": {
            "type": "number"
          },
          "rfq_id": {
            "format": "uuid",
            "type": "string"
          },
          "service_type": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "subcontractor_id": {
            "format": "uuid",
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "total": {
            "type": "number"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "warehouse_id": {
            "format": "uuid",
            "type": "string"
          }
        },
        "required": [
          "order_number",
          "subcontractor_id"
        ],
        "type": "object"
      },
      "SubcontractingReceptions": {
        "properties": {
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "notes": {
            "type": "string"
          },
          "order_id": {
            "format": "uuid",
            "type": "string"
          },
          "quantity_received": {
            "type": "number"
          },
          "quantity_rejected": {
            "type": "number"
          },
          "reception_date": {
            "format": "date",
            "type": "string"
          },
          "reception_number": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "subcontractor_id": {
            "format": "uuid",
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "warehouse_id": {
            "format": "uuid",
            "type": "string"
          }
        },
        "required": [
          "order_id",
          "reception_number"
        ],
        "type": "object"
      },
      "SubcontractingReworkOrders": {
        "properties": {
          "completed_at": {
            "format": "date-time",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "nc_reference": {
            "type": "string"
          },
          "order_reference": {
            "type": "string"
          },
          "priority": {
            "type": "string"
          },
          "quantity_recovered": {
            "type": "number"
          },
          "quantity_rejected": {
            "type": "number"
          },
          "quantity_returned": {
            "type": "number"
          },
          "reason": {
            "type": "string"
          },
          "received_at": {
            "format": "date-time",
            "type": "string"
          },
          "reference": {
            "type": "string"
          },
          "sent_at": {
            "format": "date-time",
            "type": "string"
          },
          "source_order_id": {
            "format": "uuid",
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "subcontractor": {
            "type": "string"
          },
          "subcontractor_id": {
            "format": "uuid",
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "reference"
        ],
        "type": "object"
      },
      "SubcontractingRfq": {
        "properties": {
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "deadline": {
            "format": "date",
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "notes": {
            "type": "string"
          },
          "reference": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "subcontractor_id": {
            "format": "uuid",
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "total_estimated": {
            "type": "number"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "type": "object"
      },
      "SubcontractorEvaluations": {
        "properties": {
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "delivery_score": {
            "type": "integer"
          },
          "evaluation_date": {
            "format": "date",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "notes": {
            "type": "string"
          },
          "overall_score": {
            "type": "integer"
          },
          "price_score": {
            "type": "integer"
          },
          "quality_score": {
            "type": "integer"
          },
          "subcontractor_id": {
            "format": "uuid",
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "subcontractor_id"
        ],
        "type": "object"
      },
      "Subcontractors": {
        "properties": {
          "active": {
            "type": "boolean"
          },
          "address": {
            "type": "string"
          },
          "code": {
            "type": "string"
          },
          "contact_name": {
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "email": {
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "phone": {
            "type": "string"
          },
          "specialties": {
            "items": {},
            "type": "array"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "name"
        ],
        "type": "object"
      },
      "SupplierEvaluations": {
        "properties": {
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "delivery_score": {
            "type": "integer"
          },
          "evaluation_date": {
            "format": "date",
            "type": "string"
          },
          "evaluator_id": {
            "format": "uuid",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "notes": {
            "type": "string"
          },
          "overall_score": {
            "type": "integer"
          },
          "price_score": {
            "type": "integer"
          },
          "quality_score": {
            "type": "integer"
          },
          "service_score": {
            "type": "integer"
          },
          "supplier_id": {
            "format": "uuid",
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "supplier_id"
        ],
        "type": "object"
      },
      "SupplierInvoiceItems": {
        "properties": {
          "article_id": {
            "format": "uuid",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "dim1_value_id": {
            "format": "uuid",
            "type": "string"
          },
          "dim2_value_id": {
            "format": "uuid",
            "type": "string"
          },
          "dim_set": {
            "type": "object"
          },
          "discount": {
            "type": "number"
          },
          "discount_2": {
            "type": "number"
          },
          "discount_2_type": {
            "type": "string"
          },
          "discount_type": {
            "type": "string"
          },
          "fodec_rate": {
            "type": "number"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "line_total": {
            "type": "number"
          },
          "quantity": {
            "type": "number"
          },
          "serial_number": {
            "type": "string"
          },
          "supplier_invoice_id": {
            "format": "uuid",
            "type": "string"
          },
          "tax_rate": {
            "type": "number"
          },
          "unit_price": {
            "type": "number"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "quantity",
          "supplier_invoice_id",
          "unit_price"
        ],
        "type": "object"
      },
      "SupplierInvoices": {
        "properties": {
          "affair_id": {
            "format": "uuid",
            "type": "string"
          },
          "archived_at": {
            "format": "date-time",
            "type": "string"
          },
          "archived_by": {
            "format": "uuid",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "dim1_value_id": {
            "format": "uuid",
            "type": "string"
          },
          "dim2_value_id": {
            "format": "uuid",
            "type": "string"
          },
          "dim_set": {
            "type": "object"
          },
          "due_date": {
            "format": "date-time",
            "type": "string"
          },
          "global_discount": {
            "type": "number"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "invoice_date": {
            "format": "date-time",
            "type": "string"
          },
          "invoice_number": {
            "type": "string"
          },
          "notes": {
            "type": "string"
          },
          "purchase_order_id": {
            "format": "uuid",
            "type": "string"
          },
          "stamp_duty_included": {
            "type": "boolean"
          },
          "status": {
            "type": "string"
          },
          "subtotal": {
            "type": "number"
          },
          "supplier_id": {
            "format": "uuid",
            "type": "string"
          },
          "tax_total": {
            "type": "number"
          },
          "total": {
            "type": "number"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "warehouse_id": {
            "format": "uuid",
            "type": "string"
          }
        },
        "type": "object"
      },
      "SupplierMaterialCertificates": {
        "properties": {
          "article_id": {
            "format": "uuid",
            "type": "string"
          },
          "certificate_number": {
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "expiry_date": {
            "format": "date",
            "type": "string"
          },
          "file_url": {
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "is_active": {
            "type": "boolean"
          },
          "notes": {
            "type": "string"
          },
          "standard": {
            "type": "string"
          },
          "supplier_id": {
            "format": "uuid",
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "supplier_id",
          "title"
        ],
        "type": "object"
      },
      "SupplierPayments": {
        "properties": {
          "amount": {
            "type": "number"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "notes": {
            "type": "string"
          },
          "payment_date": {
            "format": "date",
            "type": "string"
          },
          "payment_method": {
            "type": "string"
          },
          "reference": {
            "type": "string"
          },
          "supplier_id": {
            "format": "uuid",
            "type": "string"
          },
          "supplier_invoice_id": {
            "format": "uuid",
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "amount",
          "supplier_id"
        ],
        "type": "object"
      },
      "SupplierReturnItems": {
        "properties": {
          "article_id": {
            "format": "uuid",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "quantity": {
            "type": "number"
          },
          "quantity_returned": {
            "type": "number"
          },
          "reason": {
            "type": "string"
          },
          "reception_item_id": {
            "format": "uuid",
            "type": "string"
          },
          "supplier_return_id": {
            "format": "uuid",
            "type": "string"
          },
          "unit": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "quantity",
          "supplier_return_id"
        ],
        "type": "object"
      },
      "SupplierReturns": {
        "properties": {
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "created_by": {
            "format": "uuid",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "notes": {
            "type": "string"
          },
          "po_amendment_id": {
            "format": "uuid",
            "type": "string"
          },
          "purchase_order_id": {
            "format": "uuid",
            "type": "string"
          },
          "reason": {
            "type": "string"
          },
          "reception_id": {
            "format": "uuid",
            "type": "string"
          },
          "return_date": {
            "format": "date",
            "type": "string"
          },
          "return_number": {
            "type": "string"
          },
          "returned_by": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "supplier_id": {
            "format": "uuid",
            "type": "string"
          },
          "total": {
            "type": "number"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "warehouse_id": {
            "format": "uuid",
            "type": "string"
          }
        },
        "required": [
          "return_number"
        ],
        "type": "object"
      },
      "SupplierRfqItems": {
        "properties": {
          "article_id": {
            "format": "uuid",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "delivery_days": {
            "type": "integer"
          },
          "dim1_value_id": {
            "format": "uuid",
            "type": "string"
          },
          "dim2_value_id": {
            "format": "uuid",
            "type": "string"
          },
          "dim_set": {
            "type": "object"
          },
          "discount_percent": {
            "type": "number"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "notes": {
            "type": "string"
          },
          "position": {
            "type": "integer"
          },
          "quantity": {
            "type": "number"
          },
          "rfq_id": {
            "format": "uuid",
            "type": "string"
          },
          "specifications": {
            "type": "string"
          },
          "supplier_rfq_id": {
            "format": "uuid",
            "type": "string"
          },
          "tax_rate": {
            "type": "number"
          },
          "unit_price": {
            "type": "number"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "quantity",
          "rfq_id"
        ],
        "type": "object"
      },
      "SupplierRfqs": {
        "properties": {
          "affair_id": {
            "format": "uuid",
            "type": "string"
          },
          "archived_at": {
            "format": "date-time",
            "type": "string"
          },
          "archived_by": {
            "format": "uuid",
            "type": "string"
          },
          "consultation_batch_id": {
            "format": "uuid",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "created_by": {
            "format": "uuid",
            "type": "string"
          },
          "deadline": {
            "format": "date",
            "type": "string"
          },
          "dim1_value_id": {
            "format": "uuid",
            "type": "string"
          },
          "dim2_value_id": {
            "format": "uuid",
            "type": "string"
          },
          "dim_set": {
            "type": "object"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "notes": {
            "type": "string"
          },
          "opportunity_id": {
            "format": "uuid",
            "type": "string"
          },
          "purchase_request_id": {
            "format": "uuid",
            "type": "string"
          },
          "response_deadline": {
            "format": "date",
            "type": "string"
          },
          "rfq_number": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "supplier_id": {
            "format": "uuid",
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "rfq_number"
        ],
        "type": "object"
      },
      "Suppliers": {
        "properties": {
          "activity_sector": {
            "type": "string"
          },
          "address": {
            "type": "string"
          },
          "audit_date": {
            "format": "date",
            "type": "string"
          },
          "audit_result": {
            "type": "string"
          },
          "bank_name": {
            "type": "string"
          },
          "blocked": {
            "type": "string"
          },
          "certifications": {
            "type": "string"
          },
          "city": {
            "type": "string"
          },
          "classification": {
            "type": "string"
          },
          "code": {
            "type": "string"
          },
          "contact_person": {
            "type": "string"
          },
          "contact_title": {
            "type": "string"
          },
          "country": {
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "created_by": {
            "format": "uuid",
            "type": "string"
          },
          "credit_limit": {
            "type": "number"
          },
          "currency": {
            "type": "string"
          },
          "default_incoterms": {
            "type": "string"
          },
          "deleted_at": {
            "format": "date-time",
            "type": "string"
          },
          "delivery_delay": {
            "type": "integer"
          },
          "email": {
            "type": "string"
          },
          "fax": {
            "type": "string"
          },
          "franco_amount": {
            "type": "number"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "internal_memo": {
            "type": "string"
          },
          "is_active": {
            "type": "boolean"
          },
          "is_preferred": {
            "type": "boolean"
          },
          "min_order_amount": {
            "type": "number"
          },
          "mobile": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "notes": {
            "type": "string"
          },
          "payment_method": {
            "type": "string"
          },
          "payment_terms": {
            "type": "integer"
          },
          "phone": {
            "type": "string"
          },
          "postal_code": {
            "type": "string"
          },
          "quality_notes": {
            "type": "string"
          },
          "rating": {
            "type": "number"
          },
          "registration_number": {
            "type": "string"
          },
          "rib": {
            "type": "string"
          },
          "supplier_type": {
            "type": "string"
          },
          "swift_bic": {
            "type": "string"
          },
          "tax_id": {
            "type": "string"
          },
          "three_way_tolerance_amount": {
            "type": "number"
          },
          "three_way_tolerance_pct": {
            "type": "number"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "updated_by": {
            "format": "uuid",
            "type": "string"
          },
          "website": {
            "type": "string"
          }
        },
        "required": [
          "name"
        ],
        "type": "object"
      },
      "SupportTickets": {
        "properties": {
          "assigned_to": {
            "format": "uuid",
            "type": "string"
          },
          "category": {
            "type": "string"
          },
          "client_company_id": {
            "format": "uuid",
            "type": "string"
          },
          "closed_at": {
            "format": "date-time",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "escalated_at": {
            "format": "date-time",
            "type": "string"
          },
          "escalated_to": {
            "format": "uuid",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "number": {
            "type": "string"
          },
          "priority": {
            "type": "string"
          },
          "reported_by_email": {
            "type": "string"
          },
          "reported_by_name": {
            "type": "string"
          },
          "resolution": {
            "type": "string"
          },
          "resolved_at": {
            "format": "date-time",
            "type": "string"
          },
          "resolved_by": {
            "format": "uuid",
            "type": "string"
          },
          "satisfaction_rating": {
            "type": "integer"
          },
          "sla_deadline": {
            "format": "date-time",
            "type": "string"
          },
          "sla_level": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "subject": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "number",
          "subject"
        ],
        "type": "object"
      },
      "TaxRates": {
        "properties": {
          "active": {
            "type": "boolean"
          },
          "country_code": {
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "is_active": {
            "type": "boolean"
          },
          "name": {
            "type": "string"
          },
          "rate": {
            "type": "number"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "name",
          "rate"
        ],
        "type": "object"
      },
      "TechnicalLocations": {
        "properties": {
          "code": {
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "is_active": {
            "type": "boolean"
          },
          "latitude": {
            "type": "number"
          },
          "location_type": {
            "type": "string"
          },
          "longitude": {
            "type": "number"
          },
          "name": {
            "type": "string"
          },
          "parent_id": {
            "format": "uuid",
            "type": "string"
          },
          "responsible": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "code",
          "name"
        ],
        "type": "object"
      },
      "TechnicalStudies": {
        "properties": {
          "affair_id": {
            "format": "uuid",
            "type": "string"
          },
          "article_id": {
            "format": "uuid",
            "type": "string"
          },
          "content": {
            "type": "object"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "created_by": {
            "format": "uuid",
            "type": "string"
          },
          "dim1_value_id": {
            "format": "uuid",
            "type": "string"
          },
          "dim2_value_id": {
            "format": "uuid",
            "type": "string"
          },
          "dim_set": {
            "type": "object"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "locked_at": {
            "format": "date-time",
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "opportunity_id": {
            "format": "uuid",
            "type": "string"
          },
          "responsible_name": {
            "type": "string"
          },
          "sales_order_id": {
            "format": "uuid",
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "study_type": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "name"
        ],
        "type": "object"
      },
      "TimeTracking": {
        "properties": {
          "approved_by": {
            "format": "uuid",
            "type": "string"
          },
          "break_duration": {
            "type": "integer"
          },
          "clock_in": {
            "format": "date-time",
            "type": "string"
          },
          "clock_out": {
            "format": "date-time",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "date": {
            "format": "date",
            "type": "string"
          },
          "employee_id": {
            "format": "uuid",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "manufacturing_order_id": {
            "format": "uuid",
            "type": "string"
          },
          "notes": {
            "type": "string"
          },
          "operation_id": {
            "format": "uuid",
            "type": "string"
          },
          "overtime_hours": {
            "type": "number"
          },
          "status": {
            "type": "string"
          },
          "total_hours": {
            "type": "number"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "workstation_id": {
            "format": "uuid",
            "type": "string"
          }
        },
        "required": [
          "date",
          "employee_id"
        ],
        "type": "object"
      },
      "TrainingPrograms": {
        "properties": {
          "competency_ids": {
            "items": {},
            "type": "array"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "created_by": {
            "format": "uuid",
            "type": "string"
          },
          "deleted_at": {
            "format": "date-time",
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "duration": {
            "type": "integer"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "is_mandatory": {
            "type": "boolean"
          },
          "max_participants": {
            "type": "integer"
          },
          "provider": {
            "type": "string"
          },
          "recurrence_months": {
            "type": "integer"
          },
          "status": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "title"
        ],
        "type": "object"
      },
      "TrainingRecords": {
        "properties": {
          "certificate_url": {
            "type": "string"
          },
          "completed_at": {
            "format": "date-time",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "effectiveness_rating": {
            "type": "integer"
          },
          "employee_id": {
            "format": "uuid",
            "type": "string"
          },
          "expires_at": {
            "format": "date-time",
            "type": "string"
          },
          "feedback": {
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "program_id": {
            "format": "uuid",
            "type": "string"
          },
          "score": {
            "type": "number"
          },
          "status": {
            "type": "string"
          },
          "trainer_name": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "employee_id",
          "program_id"
        ],
        "type": "object"
      },
      "UnitConversions": {
        "properties": {
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "factor": {
            "type": "number"
          },
          "from_unit_id": {
            "format": "uuid",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "to_unit_id": {
            "format": "uuid",
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "factor",
          "from_unit_id",
          "to_unit_id"
        ],
        "type": "object"
      },
      "Units": {
        "properties": {
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "is_active": {
            "type": "boolean"
          },
          "name": {
            "type": "string"
          },
          "symbol": {
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "name",
          "symbol"
        ],
        "type": "object"
      },
      "UserPermissions": {
        "properties": {
          "can_create": {
            "type": "boolean"
          },
          "can_delete": {
            "type": "boolean"
          },
          "can_read": {
            "type": "boolean"
          },
          "can_update": {
            "type": "boolean"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "flags": {
            "type": "object"
          },
          "granted": {
            "type": "boolean"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "module": {
            "type": "string"
          },
          "permission": {
            "type": "string"
          },
          "sub_module": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "user_id": {
            "format": "uuid",
            "type": "string"
          }
        },
        "required": [
          "permission",
          "user_id"
        ],
        "type": "object"
      },
      "UserSessions": {
        "properties": {
          "actions_count": {
            "type": "integer"
          },
          "ended_at": {
            "format": "date-time",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "ip_address": {
            "type": "string"
          },
          "last_activity_at": {
            "format": "date-time",
            "type": "string"
          },
          "page_views": {
            "type": "integer"
          },
          "started_at": {
            "format": "date-time",
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "user_agent": {
            "type": "string"
          },
          "user_email": {
            "type": "string"
          },
          "user_id": {
            "format": "uuid",
            "type": "string"
          },
          "user_name": {
            "type": "string"
          }
        },
        "required": [
          "user_id"
        ],
        "type": "object"
      },
      "VAffairCosting": {
        "properties": {
          "actual_cost_total": {
            "type": "number"
          },
          "affair_id": {
            "format": "uuid",
            "type": "string"
          },
          "affair_number": {
            "type": "string"
          },
          "budget": {
            "type": "number"
          },
          "manufacturing_cost": {
            "type": "number"
          },
          "manufacturing_standard": {
            "type": "number"
          },
          "manufacturing_variance": {
            "type": "number"
          },
          "material_cost": {
            "type": "number"
          },
          "mo_completed": {
            "type": "integer"
          },
          "mo_count": {
            "type": "integer"
          },
          "name": {
            "type": "string"
          },
          "projected_margin": {
            "type": "number"
          },
          "projected_margin_percent": {
            "type": "number"
          },
          "quoted_ht": {
            "type": "number"
          },
          "quotes_count": {
            "type": "integer"
          },
          "status": {
            "type": "string"
          },
          "vouchers_count": {
            "type": "integer"
          }
        },
        "type": "object"
      },
      "VAuditJournal": {
        "properties": {
          "action": {
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "entity_id": {
            "type": "string"
          },
          "entity_ref": {
            "type": "string"
          },
          "entity_type": {
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "ip_address": {
            "type": "string"
          },
          "new_values": {
            "type": "object"
          },
          "old_values": {
            "type": "object"
          },
          "user_email": {
            "type": "string"
          },
          "user_id": {
            "format": "uuid",
            "type": "string"
          },
          "user_name": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "VStockIntegrityAnomalies": {
        "properties": {
          "allow_negative_stock": {
            "type": "boolean"
          },
          "anomaly": {
            "type": "string"
          },
          "article_id": {
            "format": "uuid",
            "type": "string"
          },
          "code": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "reconciliation_gap": {
            "type": "number"
          },
          "stock_quantity": {
            "type": "number"
          },
          "stock_value": {
            "type": "number"
          },
          "warehouse_quantity": {
            "type": "number"
          }
        },
        "type": "object"
      },
      "VStockMovementAnomalies": {
        "properties": {
          "article_id": {
            "format": "uuid",
            "type": "string"
          },
          "article_name": {
            "type": "string"
          },
          "avg_quantity": {
            "type": "number"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "movement_type": {
            "type": "string"
          },
          "notes": {
            "type": "string"
          },
          "quantity": {
            "type": "number"
          },
          "reference_id": {
            "format": "uuid",
            "type": "string"
          },
          "reference_type": {
            "type": "string"
          },
          "sku": {
            "type": "string"
          },
          "z_score": {
            "type": "number"
          }
        },
        "type": "object"
      },
      "VStockRuptureForecast": {
        "properties": {
          "article_id": {
            "format": "uuid",
            "type": "string"
          },
          "daily_consumption": {
            "type": "number"
          },
          "daily_consumption_30d": {
            "type": "number"
          },
          "daily_consumption_90d": {
            "type": "number"
          },
          "days_until_stockout": {
            "type": "integer"
          },
          "last_out_at": {
            "format": "date-time",
            "type": "string"
          },
          "min_stock": {
            "type": "number"
          },
          "name": {
            "type": "string"
          },
          "projected_stockout_date": {
            "format": "date",
            "type": "string"
          },
          "reorder_point": {
            "type": "number"
          },
          "severity": {
            "type": "string"
          },
          "sku": {
            "type": "string"
          },
          "stock_quantity": {
            "type": "number"
          }
        },
        "type": "object"
      },
      "VUserActivitySummary": {
        "properties": {
          "active_sessions": {
            "type": "integer"
          },
          "creates": {
            "type": "integer"
          },
          "deletes": {
            "type": "integer"
          },
          "last_seen": {
            "format": "date-time",
            "type": "string"
          },
          "logins": {
            "type": "integer"
          },
          "session_count": {
            "type": "integer"
          },
          "total_actions": {
            "type": "integer"
          },
          "total_seconds": {
            "type": "integer"
          },
          "updates": {
            "type": "integer"
          },
          "user_email": {
            "type": "string"
          },
          "user_id": {
            "format": "uuid",
            "type": "string"
          },
          "user_name": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "WarehouseLocations": {
        "properties": {
          "active": {
            "type": "boolean"
          },
          "aisle": {
            "type": "string"
          },
          "code": {
            "type": "string"
          },
          "created_by": {
            "format": "uuid",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "is_active": {
            "type": "boolean"
          },
          "location_type": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "rack": {
            "type": "string"
          },
          "shelf": {
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "updated_by": {
            "format": "uuid",
            "type": "string"
          },
          "warehouse_id": {
            "format": "uuid",
            "type": "string"
          },
          "zone": {
            "type": "string"
          }
        },
        "required": [
          "name",
          "warehouse_id"
        ],
        "type": "object"
      },
      "WarehouseStock": {
        "properties": {
          "article_id": {
            "format": "uuid",
            "type": "string"
          },
          "available_quantity": {
            "type": "number"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "last_counted_at": {
            "format": "date-time",
            "type": "string"
          },
          "last_movement_at": {
            "format": "date-time",
            "type": "string"
          },
          "quantity": {
            "type": "number"
          },
          "reserved_quantity": {
            "type": "number"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "version": {
            "type": "integer"
          },
          "warehouse_id": {
            "format": "uuid",
            "type": "string"
          }
        },
        "required": [
          "article_id",
          "warehouse_id"
        ],
        "type": "object"
      },
      "Warehouses": {
        "properties": {
          "address": {
            "type": "string"
          },
          "city": {
            "type": "string"
          },
          "code": {
            "type": "string"
          },
          "country": {
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "created_by": {
            "format": "uuid",
            "type": "string"
          },
          "email": {
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "is_active": {
            "type": "boolean"
          },
          "is_default": {
            "type": "boolean"
          },
          "manager_name": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "notes": {
            "type": "string"
          },
          "phone": {
            "type": "string"
          },
          "postal_code": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "updated_by": {
            "format": "uuid",
            "type": "string"
          }
        },
        "required": [
          "name"
        ],
        "type": "object"
      },
      "WorkflowDefinitions": {
        "properties": {
          "active": {
            "type": "boolean"
          },
          "condition_expr": {
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "entity_type": {
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "initiator_roles": {
            "items": {},
            "type": "array"
          },
          "is_active": {
            "type": "boolean"
          },
          "name": {
            "type": "string"
          },
          "priority": {
            "type": "integer"
          },
          "steps": {
            "type": "object"
          },
          "trigger_event": {
            "type": "string"
          },
          "trigger_status": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "name"
        ],
        "type": "object"
      },
      "WorkstationCompetencies": {
        "properties": {
          "competency_id": {
            "format": "uuid",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "niveau_min": {
            "type": "integer"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "workstation_id": {
            "format": "uuid",
            "type": "string"
          }
        },
        "required": [
          "competency_id",
          "workstation_id"
        ],
        "type": "object"
      },
      "WorkstationLogs": {
        "properties": {
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "duration_minutes": {
            "type": "integer"
          },
          "event_type": {
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "operator_id": {
            "format": "uuid",
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "workstation_id": {
            "format": "uuid",
            "type": "string"
          }
        },
        "required": [
          "event_type",
          "workstation_id"
        ],
        "type": "object"
      },
      "WorkstationOperators": {
        "properties": {
          "assigned_at": {
            "format": "date-time",
            "type": "string"
          },
          "employee_id": {
            "format": "uuid",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "is_primary": {
            "type": "boolean"
          },
          "skill_level": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "workstation_id": {
            "format": "uuid",
            "type": "string"
          }
        },
        "required": [
          "workstation_id"
        ],
        "type": "object"
      },
      "WorkstationSessions": {
        "properties": {
          "break_end": {
            "format": "date-time",
            "type": "string"
          },
          "break_start": {
            "format": "date-time",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "defect_quantity": {
            "type": "number"
          },
          "employee_id": {
            "format": "uuid",
            "type": "string"
          },
          "end_time": {
            "format": "date-time",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "local_id": {
            "type": "string"
          },
          "manufacturing_order_id": {
            "format": "uuid",
            "type": "string"
          },
          "notes": {
            "type": "string"
          },
          "operation_id": {
            "format": "uuid",
            "type": "string"
          },
          "produced_quantity": {
            "type": "number"
          },
          "start_time": {
            "format": "date-time",
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "synced": {
            "type": "boolean"
          },
          "total_break_minutes": {
            "type": "integer"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "workstation_id": {
            "format": "uuid",
            "type": "string"
          }
        },
        "required": [
          "employee_id",
          "workstation_id"
        ],
        "type": "object"
      },
      "Workstations": {
        "properties": {
          "capacity_per_hour": {
            "type": "number"
          },
          "code": {
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "deleted_at": {
            "format": "date-time",
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "hourly_cost": {
            "type": "number"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "location": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "notes": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "name"
        ],
        "type": "object"
      }
    },
    "securitySchemes": {
      "apiKeyAuth": {
        "bearerFormat": "avia_live_\u003cprefixe\u003e_\u003csecret\u003e",
        "description": "Cle API par locataire (Parametres \u003e Cles API). Requiert aussi l'en-tete X-Tenant-ID (une cle est une portee locataire, pas de locataire par defaut pour un appelant tiers) ; jamais depuis un navigateur (un en-tete Origin present avec ce prefixe est refuse). Scopes par module ('module:read'/'module:write', + 'rules' et 'webhooks' pour ces deux surfaces hors modules factures) restreignent l'acces en plus des roles du porteur de la cle.",
        "scheme": "bearer",
        "type": "http"
      },
      "bearerAuth": {
        "bearerFormat": "JWT",
        "description": "pkg/auth/jwt.go — uid, email, tid, cid, roles, mfa. Emis par /auth/login pour une session portail ; jamais pour une integration tierce (voir apiKeyAuth).",
        "scheme": "bearer",
        "type": "http"
      }
    }
  },
  "info": {
    "description": "Contrat genere depuis le code (docs/PLAN_API_PUBLIQUE.md, lot A) — jamais ecrit a la main. Genere par cmd/openapi-gen ; TestOpenAPIAJour verifie que ce fichier est a jour.",
    "title": "AVIA ERP — API publique",
    "version": "1.0.0"
  },
  "openapi": "3.1.0",
  "paths": {
    "/api/v1/absence-types": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "code",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "category",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "max_days_per_year",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "is_paid",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "requires_justification",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "requires_medical_certificate",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "color",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "is_active",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/AbsenceTypes"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister absence-types",
        "tags": [
          "hr"
        ],
        "x-avia-documented": true,
        "x-avia-module": "hr"
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AbsenceTypes"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AbsenceTypes"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer absence-types",
        "tags": [
          "hr"
        ],
        "x-avia-documented": true,
        "x-avia-module": "hr"
      }
    },
    "/api/v1/absence-types/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer absence-types",
        "tags": [
          "hr"
        ],
        "x-avia-documented": true,
        "x-avia-module": "hr"
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AbsenceTypes"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire absence-types par id",
        "tags": [
          "hr"
        ],
        "x-avia-documented": true,
        "x-avia-module": "hr"
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AbsenceTypes"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AbsenceTypes"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier absence-types",
        "tags": [
          "hr"
        ],
        "x-avia-documented": true,
        "x-avia-module": "hr"
      }
    },
    "/api/v1/accounting-accounts": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "code",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "parent_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "balance",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "active",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "category",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "is_active",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/Accounts"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister accounting-accounts",
        "tags": [
          "accounting"
        ],
        "x-avia-documented": true,
        "x-avia-module": "accounting"
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Accounts"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Accounts"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer accounting-accounts",
        "tags": [
          "accounting"
        ],
        "x-avia-documented": true,
        "x-avia-module": "accounting"
      }
    },
    "/api/v1/accounting-accounts/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer accounting-accounts",
        "tags": [
          "accounting"
        ],
        "x-avia-documented": true,
        "x-avia-module": "accounting"
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Accounts"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire accounting-accounts par id",
        "tags": [
          "accounting"
        ],
        "x-avia-documented": true,
        "x-avia-module": "accounting"
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Accounts"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Accounts"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier accounting-accounts",
        "tags": [
          "accounting"
        ],
        "x-avia-documented": true,
        "x-avia-module": "accounting"
      }
    },
    "/api/v1/accounting-entries": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "entry_number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "journal",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "entry_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "account_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "debit",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "credit",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "description",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "reference",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "document_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "document_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "period",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "reconciliation_code",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "reconciled",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "reconciled_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "locked",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dimension_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "cost_center",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "company_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim1_value_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim2_value_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim_set",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/AccountingEntries"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister accounting-entries",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AccountingEntries"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AccountingEntries"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer accounting-entries",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/accounting-entries/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer accounting-entries",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AccountingEntries"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire accounting-entries par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AccountingEntries"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AccountingEntries"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier accounting-entries",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/accounting/accounts": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "code",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "parent_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "balance",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "active",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "category",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "is_active",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/Accounts"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister accounting/accounts",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Accounts"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Accounts"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer accounting/accounts",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/accounting/accounts/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer accounting/accounts",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Accounts"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire accounting/accounts par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Accounts"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Accounts"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier accounting/accounts",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/accounts": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "code",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "parent_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "balance",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "active",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "category",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "is_active",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/Accounts"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister accounts",
        "tags": [
          "accounting"
        ],
        "x-avia-documented": true,
        "x-avia-module": "accounting"
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Accounts"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Accounts"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer accounts",
        "tags": [
          "accounting"
        ],
        "x-avia-documented": true,
        "x-avia-module": "accounting"
      }
    },
    "/api/v1/accounts/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer accounts",
        "tags": [
          "accounting"
        ],
        "x-avia-documented": true,
        "x-avia-module": "accounting"
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Accounts"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire accounts par id",
        "tags": [
          "accounting"
        ],
        "x-avia-documented": true,
        "x-avia-module": "accounting"
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Accounts"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Accounts"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier accounts",
        "tags": [
          "accounting"
        ],
        "x-avia-documented": true,
        "x-avia-module": "accounting"
      }
    },
    "/api/v1/active-operations-realtime": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "operation_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "operation_name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "sequence",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "realtime_status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "started_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "paused_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "pause_duration",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "estimated_duration",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "active_duration_minutes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "progress_percentage",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "is_delayed",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "employee_name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "order_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "order_number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "product_name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "workstation_name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/ActiveOperationsRealtime"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister active-operations-realtime",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/active-operations-realtime/{id}": {
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ActiveOperationsRealtime"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire active-operations-realtime par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/admin/activity": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "cmd/business-service/main.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/admin/auth-guard/observations": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "cmd/business-service/main.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/admin/metrics": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "cmd/business-service/main.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/admin/overview": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "cmd/business-service/main.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/admin/users": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "cmd/business-service/main.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/admin/users/{id}": {
      "delete": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "cmd/business-service/main.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/admin/users/{id}/lock": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "cmd/business-service/main.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/admin/users/{id}/password": {
      "put": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "cmd/business-service/main.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/admin/users/{id}/unlock": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "cmd/business-service/main.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/affair-items": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "affair_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "article_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "description",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quantity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "unit_price",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "total_price",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "item_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/AffairItems"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister affair-items",
        "tags": [
          "affairs"
        ],
        "x-avia-documented": true,
        "x-avia-module": "affairs"
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AffairItems"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AffairItems"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer affair-items",
        "tags": [
          "affairs"
        ],
        "x-avia-documented": true,
        "x-avia-module": "affairs"
      }
    },
    "/api/v1/affair-items/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer affair-items",
        "tags": [
          "affairs"
        ],
        "x-avia-documented": true,
        "x-avia-module": "affairs"
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AffairItems"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire affair-items par id",
        "tags": [
          "affairs"
        ],
        "x-avia-documented": true,
        "x-avia-module": "affairs"
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AffairItems"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AffairItems"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier affair-items",
        "tags": [
          "affairs"
        ],
        "x-avia-documented": true,
        "x-avia-module": "affairs"
      }
    },
    "/api/v1/affairs": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "affair_number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "client_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "client_name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "description",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "start_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "end_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "budget",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "actual_cost",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "revenue",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "margin",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "margin_percent",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "progress",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "responsible_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "responsible_name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "execution_mode",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "chantier_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "project_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "contact_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/Affairs"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister affairs",
        "tags": [
          "affairs"
        ],
        "x-avia-documented": true,
        "x-avia-module": "affairs"
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Affairs"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Affairs"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer affairs",
        "tags": [
          "affairs"
        ],
        "x-avia-documented": true,
        "x-avia-module": "affairs"
      }
    },
    "/api/v1/affairs/costing": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "affair_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "affair_number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "budget",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quoted_ht",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quotes_count",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "material_cost",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "vouchers_count",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "manufacturing_cost",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "manufacturing_standard",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "manufacturing_variance",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "mo_count",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "mo_completed",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "actual_cost_total",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "projected_margin",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "projected_margin_percent",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/VAffairCosting"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister affairs/costing",
        "tags": [
          "affairs"
        ],
        "x-avia-documented": true,
        "x-avia-module": "affairs"
      }
    },
    "/api/v1/affairs/costing/{id}": {
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VAffairCosting"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire affairs/costing par id",
        "tags": [
          "affairs"
        ],
        "x-avia-documented": true,
        "x-avia-module": "affairs"
      }
    },
    "/api/v1/affairs/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer affairs",
        "tags": [
          "affairs"
        ],
        "x-avia-documented": true,
        "x-avia-module": "affairs"
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Affairs"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire affairs par id",
        "tags": [
          "affairs"
        ],
        "x-avia-documented": true,
        "x-avia-module": "affairs"
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Affairs"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Affairs"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier affairs",
        "tags": [
          "affairs"
        ],
        "x-avia-documented": true,
        "x-avia-module": "affairs"
      }
    },
    "/api/v1/affairs/{id}/cost-rollup": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/affairworkflow/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/affairs/{id}/pipeline": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/affairworkflow/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/affairs/{id}/profitability": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/affairworkflow/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/ai/interactions": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "user_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "module",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "query",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "response",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "tokens_used",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "page_path",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "entity_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "entity_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "use_case",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "user_verdict",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "provider",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "latency_ms",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "context_json",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/AiInteractions"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister ai/interactions",
        "tags": [
          "ai"
        ],
        "x-avia-documented": true,
        "x-avia-module": "ai"
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AiInteractions"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AiInteractions"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer ai/interactions",
        "tags": [
          "ai"
        ],
        "x-avia-documented": true,
        "x-avia-module": "ai"
      }
    },
    "/api/v1/ai/interactions/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer ai/interactions",
        "tags": [
          "ai"
        ],
        "x-avia-documented": true,
        "x-avia-module": "ai"
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AiInteractions"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire ai/interactions par id",
        "tags": [
          "ai"
        ],
        "x-avia-documented": true,
        "x-avia-module": "ai"
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AiInteractions"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AiInteractions"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier ai/interactions",
        "tags": [
          "ai"
        ],
        "x-avia-documented": true,
        "x-avia-module": "ai"
      }
    },
    "/api/v1/article-requests": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "requester_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "title",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "description",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "category",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "specifications",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "estimated_price",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "unit",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "approved_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "article_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "rejection_reason",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/ArticleRequests"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister article-requests",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ArticleRequests"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ArticleRequests"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer article-requests",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/article-requests/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer article-requests",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ArticleRequests"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire article-requests par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ArticleRequests"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ArticleRequests"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier article-requests",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/article-suppliers": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "article_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "supplier_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "supplier_reference",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "is_preferred",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "position",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "lead_time_days",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/ArticleSuppliers"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister article-suppliers",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ArticleSuppliers"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ArticleSuppliers"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer article-suppliers",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/article-suppliers/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer article-suppliers",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ArticleSuppliers"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire article-suppliers par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ArticleSuppliers"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ArticleSuppliers"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier article-suppliers",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/articles": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "reference",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "designation",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "description",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "family_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "unit_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "purchase_price",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "sale_price",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "tax_rate",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "weight",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "min_stock",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "max_stock",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "current_stock",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "is_active",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "barcode",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "image_url",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "deleted_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "stock_quantity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "version",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "code",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "sales_unit_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "is_purchasable",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "sku",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "shelf_life_days",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "allow_negative_stock",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "supplier_reference",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "fodec",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "article_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "subfamily2_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "internal_notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "subfamily_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "sector",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "cost_price",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "unit_price",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "discount_max",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "margin_percent",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "reorder_point",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "reorder_qty",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "lead_time",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "valuation_method",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "stock_method",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "location",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "is_sellable",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "is_blocked",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "track_inventory",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "purchase_unit_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "weight_unit_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "supplier_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "tax_rate_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "pmp_price",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "last_purchase_price",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "stock_value",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "unit_conversion_factor",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "track_serial",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "track_lots",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "stock_unit_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quote_designation",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quote_description",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "blocked",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "tracking_profile",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "planning_method",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "buffer_profile_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "decoupled_lead_time_days",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/Articles"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister articles",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Articles"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Articles"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer articles",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/articles/atp-batch": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/stock/interfaces/http/warehouse_lot_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/articles/categories": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "parent_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "is_active",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "code",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "description",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "color",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/ArticleFamilies"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister articles/categories",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ArticleFamilies"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ArticleFamilies"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer articles/categories",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/articles/categories/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer articles/categories",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ArticleFamilies"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire articles/categories par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ArticleFamilies"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ArticleFamilies"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier articles/categories",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/articles/units": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "symbol",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "is_active",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/Units"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister articles/units",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Units"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Units"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer articles/units",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/articles/units/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer articles/units",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Units"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire articles/units par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Units"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Units"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier articles/units",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/articles/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer articles",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Articles"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire articles par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Articles"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Articles"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier articles",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/articles/{id}/atp": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/stock/interfaces/http/warehouse_lot_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/articles/{id}/buffer-zones": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/stock/interfaces/http/warehouse_lot_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/assembly-guides": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "article_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "version",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "flow_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "title",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "description",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "product_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/AssemblyGuides"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister assembly-guides",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AssemblyGuides"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssemblyGuides"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer assembly-guides",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/assembly-guides-list": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "article_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "version",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "flow_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "title",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "description",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "product_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/AssemblyGuides"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister assembly-guides-list",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AssemblyGuides"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssemblyGuides"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer assembly-guides-list",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/assembly-guides-list/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer assembly-guides-list",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssemblyGuides"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire assembly-guides-list par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AssemblyGuides"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssemblyGuides"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier assembly-guides-list",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/assembly-guides/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer assembly-guides",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssemblyGuides"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire assembly-guides par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AssemblyGuides"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssemblyGuides"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier assembly-guides",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/assembly-steps": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "guide_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "step_number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "title",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "instructions",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "image_url",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "duration_minutes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "tools_required",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "safety_notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "estimated_time",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/AssemblySteps"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister assembly-steps",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AssemblySteps"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssemblySteps"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer assembly-steps",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/assembly-steps/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer assembly-steps",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssemblySteps"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire assembly-steps par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AssemblySteps"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssemblySteps"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier assembly-steps",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/asset-categories": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "depreciation_method",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "useful_life_years",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/AssetCategories"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister asset-categories",
        "tags": [
          "interventions"
        ],
        "x-avia-documented": true,
        "x-avia-module": "interventions"
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AssetCategories"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetCategories"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer asset-categories",
        "tags": [
          "interventions"
        ],
        "x-avia-documented": true,
        "x-avia-module": "interventions"
      }
    },
    "/api/v1/asset-categories/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer asset-categories",
        "tags": [
          "interventions"
        ],
        "x-avia-documented": true,
        "x-avia-module": "interventions"
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetCategories"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire asset-categories par id",
        "tags": [
          "interventions"
        ],
        "x-avia-documented": true,
        "x-avia-module": "interventions"
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AssetCategories"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetCategories"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier asset-categories",
        "tags": [
          "interventions"
        ],
        "x-avia-documented": true,
        "x-avia-module": "interventions"
      }
    },
    "/api/v1/atp-timeline": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "article_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "warehouse_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "event_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "source_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "source_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "source_reference",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "movement",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "running_balance",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/AtpTimeline"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister atp-timeline",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/atp-timeline/{id}": {
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AtpTimeline"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire atp-timeline par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/attachments": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "entity_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "entity_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "file_name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "file_url",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "file_size",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "mime_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "uploaded_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "category",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "description",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "ocr_metadata",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/Attachments"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister attachments",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Attachments"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Attachments"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer attachments",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/attachments/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer attachments",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Attachments"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire attachments par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Attachments"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Attachments"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier attachments",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/audit-logs": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "user_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "user_name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "user_email",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "action",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "entity_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "entity_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "entity_ref",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "old_values",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "new_values",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "ip_address",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "description",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/VAuditJournal"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister audit-logs",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/audit-logs/{id}": {
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VAuditJournal"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire audit-logs par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/audit-plans": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "description",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "audit_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "scope",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "standard",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "department",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "planned_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "lead_auditor_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "deleted_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/AuditPlans"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister audit-plans",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AuditPlans"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuditPlans"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer audit-plans",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/audit-plans/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer audit-plans",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuditPlans"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire audit-plans par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AuditPlans"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuditPlans"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier audit-plans",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/audit/chain/verify": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/audit/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/audit/export": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/audit/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/audit/journal": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "user_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "user_name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "user_email",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "action",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "entity_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "entity_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "entity_ref",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "old_values",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "new_values",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "ip_address",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "description",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/VAuditJournal"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister audit/journal",
        "tags": [
          "audit"
        ],
        "x-avia-documented": true,
        "x-avia-module": "audit"
      }
    },
    "/api/v1/audit/journal/{id}": {
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VAuditJournal"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire audit/journal par id",
        "tags": [
          "audit"
        ],
        "x-avia-documented": true,
        "x-avia-module": "audit"
      }
    },
    "/api/v1/audit/logs": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/audit/interfaces/http/handler.go",
        "x-avia-documented": false
      },
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "cmd/business-service/main.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/audit/logs/{resource}/{id}": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/audit/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/audit/stats": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/audit/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/audit/user-activity": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "user_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "user_email",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "user_name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "total_actions",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "creates",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updates",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "deletes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "logins",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "session_count",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "active_sessions",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "total_seconds",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "last_seen",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/VUserActivitySummary"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister audit/user-activity",
        "tags": [
          "audit"
        ],
        "x-avia-documented": true,
        "x-avia-module": "audit"
      }
    },
    "/api/v1/audit/user-activity/{id}": {
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VUserActivitySummary"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire audit/user-activity par id",
        "tags": [
          "audit"
        ],
        "x-avia-documented": true,
        "x-avia-module": "audit"
      }
    },
    "/api/v1/audits": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "audit_plan_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "audit_number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "title",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "audit_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "scope",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "scheduled_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "actual_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "lead_auditor_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "findings_count",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "nc_count",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "score",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "summary",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "deleted_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/Audits"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister audits",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Audits"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Audits"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer audits",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/audits/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer audits",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Audits"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire audits par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Audits"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Audits"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier audits",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/auth/login": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "cmd/business-service/main.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/auth/me": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "cmd/business-service/main.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/auth/password": {
      "put": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "cmd/business-service/main.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/auth/password/forgot": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/iam/interfaces/http/password_reset.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/auth/password/reset": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/iam/interfaces/http/password_reset.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/auth/refresh": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "cmd/business-service/main.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/auth/register": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "cmd/business-service/main.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/auth/sign-in": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "cmd/business-service/main.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/auth/sign-up": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "cmd/business-service/main.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/automation/run": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/automation/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/automation/status": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/automation/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/bank-statement-lines": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "statement_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "transaction_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "value_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "description",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "reference",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "amount",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "matched_payment_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "matched_entry_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "reconciled",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/BankStatementLines"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister bank-statement-lines",
        "tags": [
          "treasury"
        ],
        "x-avia-documented": true,
        "x-avia-module": "treasury"
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BankStatementLines"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BankStatementLines"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer bank-statement-lines",
        "tags": [
          "treasury"
        ],
        "x-avia-documented": true,
        "x-avia-module": "treasury"
      }
    },
    "/api/v1/bank-statement-lines/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer bank-statement-lines",
        "tags": [
          "treasury"
        ],
        "x-avia-documented": true,
        "x-avia-module": "treasury"
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BankStatementLines"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire bank-statement-lines par id",
        "tags": [
          "treasury"
        ],
        "x-avia-documented": true,
        "x-avia-module": "treasury"
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BankStatementLines"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BankStatementLines"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier bank-statement-lines",
        "tags": [
          "treasury"
        ],
        "x-avia-documented": true,
        "x-avia-module": "treasury"
      }
    },
    "/api/v1/bank-statements": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "bank_name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "account_number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "statement_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "opening_balance",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "closing_balance",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "currency",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "imported_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/BankStatements"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister bank-statements",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BankStatements"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BankStatements"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer bank-statements",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/bank-statements/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer bank-statements",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BankStatements"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire bank-statements par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BankStatements"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BankStatements"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier bank-statements",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/bill-of-materials": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "article_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "version",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "deleted_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "yield_rate",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "is_active",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/BillOfMaterials"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister bill-of-materials",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BillOfMaterials"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BillOfMaterials"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer bill-of-materials",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/bill-of-materials/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer bill-of-materials",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BillOfMaterials"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire bill-of-materials par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BillOfMaterials"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BillOfMaterials"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier bill-of-materials",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/bom": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "article_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "version",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "deleted_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "yield_rate",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "is_active",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/BillOfMaterials"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister bom",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BillOfMaterials"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BillOfMaterials"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer bom",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/bom-co-products": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "bom_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "article_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "qty",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "cost_share_pct",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/BomCoProducts"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister bom-co-products",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BomCoProducts"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BomCoProducts"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer bom-co-products",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/bom-co-products/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer bom-co-products",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BomCoProducts"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire bom-co-products par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BomCoProducts"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BomCoProducts"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier bom-co-products",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/bom-items": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "bom_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "article_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quantity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "unit",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "position",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "unit_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "wastage_rate",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "is_critical",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "substitute_article_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "child_bom_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/BomItems"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister bom-items",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BomItems"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BomItems"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer bom-items",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/bom-items/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer bom-items",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BomItems"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire bom-items par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BomItems"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BomItems"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier bom-items",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/bom-lines": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "bom_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "component_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quantity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "unit",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "scrap_rate",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "article_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/BomLines"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister bom-lines",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BomLines"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BomLines"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer bom-lines",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/bom-lines/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer bom-lines",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BomLines"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire bom-lines par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BomLines"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BomLines"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier bom-lines",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/bom-recommendations": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "bom_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "recommendation",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "priority",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "generated_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "payload",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "title",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/BomRecommendations"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister bom-recommendations",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BomRecommendations"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BomRecommendations"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer bom-recommendations",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/bom-recommendations/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer bom-recommendations",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BomRecommendations"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire bom-recommendations par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BomRecommendations"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BomRecommendations"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier bom-recommendations",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/bom/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer bom",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BillOfMaterials"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire bom par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BillOfMaterials"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BillOfMaterials"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier bom",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/breakdown-reports": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "workstation_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "reported_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "session_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "breakdown_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "severity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "title",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "description",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "workstation_stopped",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "resolved_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "resolved_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "resolution_notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "synced",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "local_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "photos",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/BreakdownReports"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister breakdown-reports",
        "tags": [
          "interventions"
        ],
        "x-avia-documented": true,
        "x-avia-module": "interventions"
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BreakdownReports"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BreakdownReports"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer breakdown-reports",
        "tags": [
          "interventions"
        ],
        "x-avia-documented": true,
        "x-avia-module": "interventions"
      }
    },
    "/api/v1/breakdown-reports/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer breakdown-reports",
        "tags": [
          "interventions"
        ],
        "x-avia-documented": true,
        "x-avia-module": "interventions"
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BreakdownReports"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire breakdown-reports par id",
        "tags": [
          "interventions"
        ],
        "x-avia-documented": true,
        "x-avia-module": "interventions"
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BreakdownReports"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BreakdownReports"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier breakdown-reports",
        "tags": [
          "interventions"
        ],
        "x-avia-documented": true,
        "x-avia-module": "interventions"
      }
    },
    "/api/v1/budget-lines": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "budget_period_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "account_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "planned_amount",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "actual_amount",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "variance",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "cost_center",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "period_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "budget_amount",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "category",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "department",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "account_code",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "description",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "jan",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "feb",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "mar",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "apr",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "may",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "jun",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "jul",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "aug",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "sep",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "oct",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "nov",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dec",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/BudgetLines"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister budget-lines",
        "tags": [
          "accounting"
        ],
        "x-avia-documented": true,
        "x-avia-module": "accounting"
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BudgetLines"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BudgetLines"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer budget-lines",
        "tags": [
          "accounting"
        ],
        "x-avia-documented": true,
        "x-avia-module": "accounting"
      }
    },
    "/api/v1/budget-lines/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer budget-lines",
        "tags": [
          "accounting"
        ],
        "x-avia-documented": true,
        "x-avia-module": "accounting"
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BudgetLines"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire budget-lines par id",
        "tags": [
          "accounting"
        ],
        "x-avia-documented": true,
        "x-avia-module": "accounting"
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BudgetLines"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BudgetLines"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier budget-lines",
        "tags": [
          "accounting"
        ],
        "x-avia-documented": true,
        "x-avia-module": "accounting"
      }
    },
    "/api/v1/budget-periods": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "start_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "end_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "fiscal_year",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/BudgetPeriods"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister budget-periods",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BudgetPeriods"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BudgetPeriods"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer budget-periods",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/budget-periods/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer budget-periods",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BudgetPeriods"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire budget-periods par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BudgetPeriods"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BudgetPeriods"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier budget-periods",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/buffer-profiles": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "code",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "lead_time_category",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "variability_category",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "lead_time_factor",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "variability_factor",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "moq",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "is_active",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/BufferProfiles"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister buffer-profiles",
        "tags": [
          "planning"
        ],
        "x-avia-documented": true,
        "x-avia-module": "planning"
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BufferProfiles"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BufferProfiles"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer buffer-profiles",
        "tags": [
          "planning"
        ],
        "x-avia-documented": true,
        "x-avia-module": "planning"
      }
    },
    "/api/v1/buffer-profiles/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer buffer-profiles",
        "tags": [
          "planning"
        ],
        "x-avia-documented": true,
        "x-avia-module": "planning"
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BufferProfiles"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire buffer-profiles par id",
        "tags": [
          "planning"
        ],
        "x-avia-documented": true,
        "x-avia-module": "planning"
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BufferProfiles"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BufferProfiles"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier buffer-profiles",
        "tags": [
          "planning"
        ],
        "x-avia-documented": true,
        "x-avia-module": "planning"
      }
    },
    "/api/v1/calibrations": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "instrument_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "calibration_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "calibrated_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "result",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "certificate_number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "deviation",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "uncertainty",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "next_due",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/Calibrations"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister calibrations",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Calibrations"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Calibrations"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer calibrations",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/calibrations/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer calibrations",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Calibrations"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire calibrations par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Calibrations"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Calibrations"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier calibrations",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/cash-disbursements": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "supplier_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "invoice_reference",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "schedule_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "disbursement_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "amount",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "currency",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "payment_method",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "bank_reference",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "bank_account",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/CashDisbursements"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister cash-disbursements",
        "tags": [
          "treasury"
        ],
        "x-avia-documented": true,
        "x-avia-module": "treasury"
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CashDisbursements"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CashDisbursements"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer cash-disbursements",
        "tags": [
          "treasury"
        ],
        "x-avia-documented": true,
        "x-avia-module": "treasury"
      }
    },
    "/api/v1/cash-disbursements/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer cash-disbursements",
        "tags": [
          "treasury"
        ],
        "x-avia-documented": true,
        "x-avia-module": "treasury"
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CashDisbursements"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire cash-disbursements par id",
        "tags": [
          "treasury"
        ],
        "x-avia-documented": true,
        "x-avia-module": "treasury"
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CashDisbursements"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CashDisbursements"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier cash-disbursements",
        "tags": [
          "treasury"
        ],
        "x-avia-documented": true,
        "x-avia-module": "treasury"
      }
    },
    "/api/v1/cash-receipts": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "client_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "invoice_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "schedule_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "receipt_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "amount",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "currency",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "payment_method",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "bank_reference",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "bank_account",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/CashReceipts"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister cash-receipts",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CashReceipts"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CashReceipts"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer cash-receipts",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/cash-receipts/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer cash-receipts",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CashReceipts"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire cash-receipts par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CashReceipts"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CashReceipts"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier cash-receipts",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/categories": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "parent_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "is_active",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "code",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "description",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "color",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/ArticleFamilies"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister categories",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ArticleFamilies"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ArticleFamilies"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer categories",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/categories/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer categories",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ArticleFamilies"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire categories par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ArticleFamilies"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ArticleFamilies"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier categories",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/chantiers": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/chantier/interfaces/http/handler.go",
        "x-avia-documented": false
      },
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/chantier/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/chantiers/{id}": {
      "delete": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/chantier/interfaces/http/handler.go",
        "x-avia-documented": false
      },
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/chantier/interfaces/http/handler.go",
        "x-avia-documented": false
      },
      "put": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/chantier/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/chantiers/{id}/articles": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/chantier/interfaces/http/handler.go",
        "x-avia-documented": false
      },
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/chantier/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/chantiers/{id}/equipment": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/chantier/interfaces/http/handler.go",
        "x-avia-documented": false
      },
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/chantier/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/chantiers/{id}/status": {
      "patch": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/chantier/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/chantiers/{id}/tasks": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/chantier/interfaces/http/handler.go",
        "x-avia-documented": false
      },
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/chantier/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/chantiers/{id}/tasks/{taskId}": {
      "put": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/chantier/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/chat-history": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "session_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "role",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "content",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "metadata",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "user_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "timestamp",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/ChatHistory"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister chat-history",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ChatHistory"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ChatHistory"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer chat-history",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/chat-history/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer chat-history",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ChatHistory"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire chat-history par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ChatHistory"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ChatHistory"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier chat-history",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/chat/messages/{id}/read": {
      "put": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/chat/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/chat/threads": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/chat/interfaces/http/handler.go",
        "x-avia-documented": false
      },
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/chat/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/chat/threads/{id}/messages": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/chat/interfaces/http/handler.go",
        "x-avia-documented": false
      },
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/chat/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/chat/unread-count": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/chat/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/client-categories": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "code",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "description",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "is_active",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/ClientCategories"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister client-categories",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ClientCategories"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ClientCategories"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer client-categories",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/client-categories/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer client-categories",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ClientCategories"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire client-categories par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ClientCategories"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ClientCategories"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier client-categories",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/client-category-prices": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "client_category_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "article_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "price_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "value",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "start_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "end_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "is_active",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/ClientCategoryArticlePrices"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister client-category-prices",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ClientCategoryArticlePrices"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ClientCategoryArticlePrices"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer client-category-prices",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/client-category-prices/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer client-category-prices",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ClientCategoryArticlePrices"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire client-category-prices par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ClientCategoryArticlePrices"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ClientCategoryArticlePrices"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier client-category-prices",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/client-complaints": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "complaint_number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "client_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "subject",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "description",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "severity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "resolution",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "resolved_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "channel",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/ClientComplaints"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister client-complaints",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ClientComplaints"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ClientComplaints"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer client-complaints",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/client-complaints/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer client-complaints",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ClientComplaints"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire client-complaints par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ClientComplaints"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ClientComplaints"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier client-complaints",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/client-relations": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "client_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "relation_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "score",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/ClientRelations"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister client-relations",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ClientRelations"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ClientRelations"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer client-relations",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/client-relations/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer client-relations",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ClientRelations"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire client-relations par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ClientRelations"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ClientRelations"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier client-relations",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/client-return-items": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "client_return_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "article_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quantity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "reason",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "description",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "unit_price",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "total",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/ClientReturnItems"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister client-return-items",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ClientReturnItems"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ClientReturnItems"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer client-return-items",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/client-return-items/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer client-return-items",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ClientReturnItems"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire client-return-items par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ClientReturnItems"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ClientReturnItems"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier client-return-items",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/client-returns": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "return_number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "client_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "invoice_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "reason",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "total",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "warehouse_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/ClientReturns"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister client-returns",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ClientReturns"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ClientReturns"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer client-returns",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/client-returns/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer client-returns",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ClientReturns"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire client-returns par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ClientReturns"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ClientReturns"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier client-returns",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/clients": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "code",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "email",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "phone",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "address",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "city",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "country",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "tax_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "contact_person",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "payment_terms",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "credit_limit",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "is_active",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "deleted_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "client_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "website",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "postal_code",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "mobile",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "fax",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "registration_number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "activity_sector",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "contact_title",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "commercial_agent",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "price_category",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "discount_default",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "loyalty_points",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "customer_since",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "payment_method",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "currency",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "rib",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "bank_name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "internal_memo",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "is_vip",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "send_newsletter",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "bank_account",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "discount_rate",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "price_list",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "commercial_rep",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "internal_notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "code_client",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "matricule_fiscale",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "portal_access_code",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "tax_profile",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "client_category_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "blocked",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/Clients"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister clients",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Clients"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Clients"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer clients",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/clients/contacts": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "client_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "first_name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "last_name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "email",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "phone",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "position",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "is_primary",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/ClientContacts"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister clients/contacts",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ClientContacts"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ClientContacts"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer clients/contacts",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/clients/contacts/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer clients/contacts",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ClientContacts"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire clients/contacts par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ClientContacts"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ClientContacts"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier clients/contacts",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/clients/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer clients",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Clients"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire clients par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Clients"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Clients"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier clients",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/codes/next": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "cmd/business-service/main.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/company-settings": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "company_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "key",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "value",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "category",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/CompanySettings"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister company-settings",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CompanySettings"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CompanySettings"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer company-settings",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/company-settings/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer company-settings",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CompanySettings"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire company-settings par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CompanySettings"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CompanySettings"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier company-settings",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/component-consumptions": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "confirmation_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "manufacturing_order_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "operation_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "article_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "article_name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quantity_consumed",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "unit_cost",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "total_cost",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "consumption_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "consumed_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "mo_line_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/ComponentConsumptions"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister component-consumptions",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ComponentConsumptions"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ComponentConsumptions"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer component-consumptions",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/component-consumptions/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer component-consumptions",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ComponentConsumptions"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire component-consumptions par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ComponentConsumptions"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ComponentConsumptions"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier component-consumptions",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/consumption-vouchers": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/consumption/interfaces/http/handler.go",
        "x-avia-documented": false
      },
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/consumption/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/consumption-vouchers/{id}": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/consumption/interfaces/http/handler.go",
        "x-avia-documented": false
      },
      "put": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/consumption/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/consumption-vouchers/{id}/attachments": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/procurement/interfaces/http/procurement_ops.go",
        "x-avia-documented": false
      },
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/procurement/interfaces/http/procurement_ops.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/consumption-vouchers/{id}/close": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/consumption/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/consumption-vouchers/{id}/items": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/consumption/interfaces/http/handler.go",
        "x-avia-documented": false
      },
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/consumption/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/consumption-vouchers/{id}/status": {
      "patch": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/consumption/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/credit-note-items": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "credit_note_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "article_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "description",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quantity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "unit_price",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "line_total",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "fodec_rate",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "tax_rate",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "discount_percent",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "discount_2",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "discount_2_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim1_value_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim2_value_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim_set",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/CreditNoteItems"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister credit-note-items",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreditNoteItems"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreditNoteItems"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer credit-note-items",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/credit-note-items/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer credit-note-items",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreditNoteItems"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire credit-note-items par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreditNoteItems"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreditNoteItems"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier credit-note-items",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/credit-notes": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "credit_number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "invoice_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "client_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "reason",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "subtotal",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "tax_total",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "total",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "issue_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "deleted_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "credit_note_number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "supplier_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "operation_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "tax_amount",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "terms",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "stamp_duty",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "archived_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "archived_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "fodec_amount",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim1_value_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim2_value_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim_set",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "warehouse_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/CreditNotes"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister credit-notes",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreditNotes"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreditNotes"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer credit-notes",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/credit-notes/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer credit-notes",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreditNotes"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire credit-notes par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreditNotes"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreditNotes"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier credit-notes",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/crm-tasks": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "title",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "description",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "priority",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "due_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "completed_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "client_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "opportunity_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "assigned_to",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/CrmTasks"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister crm-tasks",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CrmTasks"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CrmTasks"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer crm-tasks",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/crm-tasks/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer crm-tasks",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CrmTasks"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire crm-tasks par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CrmTasks"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CrmTasks"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier crm-tasks",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/crm/campaigns": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "description",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "start_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "end_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "budget",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "actual_cost",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "target_segment_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "objective",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "audience_segment",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "audience_size",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "kpi_target_leads",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "kpi_target_conversions",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "kpi_target_revenue",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "kpi_target_roi",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "sent",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "opens",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "clicks",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/MarketingCampaigns"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister crm/campaigns",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MarketingCampaigns"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MarketingCampaigns"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer crm/campaigns",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/crm/campaigns/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer crm/campaigns",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MarketingCampaigns"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire crm/campaigns par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MarketingCampaigns"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MarketingCampaigns"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier crm/campaigns",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/crm/client-interactions": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/crm/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/crm/clients/{clientId}/360": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/crm/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/crm/clients/{clientId}/interactions": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/crm/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/crm/dashboard": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/crm/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/crm/email-analytics": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/crm/interfaces/http/email_mailing_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/crm/email-campaigns": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/crm/interfaces/http/email_mailing_handler.go",
        "x-avia-documented": false
      },
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/crm/interfaces/http/email_mailing_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/crm/email-campaigns/process-scheduled": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/crm/interfaces/http/email_mailing_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/crm/email-campaigns/{id}": {
      "delete": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/crm/interfaces/http/email_mailing_handler.go",
        "x-avia-documented": false
      },
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/crm/interfaces/http/email_mailing_handler.go",
        "x-avia-documented": false
      },
      "put": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/crm/interfaces/http/email_mailing_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/crm/email-campaigns/{id}/send": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/crm/interfaces/http/email_mailing_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/crm/email-segments": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/crm/interfaces/http/email_mailing_handler.go",
        "x-avia-documented": false
      },
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/crm/interfaces/http/email_mailing_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/crm/email-segments/{id}": {
      "delete": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/crm/interfaces/http/email_mailing_handler.go",
        "x-avia-documented": false
      },
      "put": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/crm/interfaces/http/email_mailing_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/crm/email-segments/{id}/preview": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/crm/interfaces/http/email_mailing_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/crm/email-templates": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/crm/interfaces/http/email_mailing_handler.go",
        "x-avia-documented": false
      },
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/crm/interfaces/http/email_mailing_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/crm/email-templates/{id}": {
      "delete": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/crm/interfaces/http/email_mailing_handler.go",
        "x-avia-documented": false
      },
      "put": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/crm/interfaces/http/email_mailing_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/crm/forecast": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/crm/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/crm/interactions": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "client_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "opportunity_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "interaction_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "subject",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "description",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "interaction_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "next_action",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "next_action_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "direction",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "recipient_email",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/CrmInteractions"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister crm/interactions",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CrmInteractions"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CrmInteractions"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer crm/interactions",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/crm/interactions/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer crm/interactions",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CrmInteractions"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire crm/interactions par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CrmInteractions"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CrmInteractions"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier crm/interactions",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/crm/lead-scoring": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/crm/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/crm/opportunities": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/crm/interfaces/http/handler.go",
        "x-avia-documented": false
      },
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/crm/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/crm/opportunities/{id}": {
      "delete": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/crm/interfaces/http/handler.go",
        "x-avia-documented": false
      },
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/crm/interfaces/http/handler.go",
        "x-avia-documented": false
      },
      "put": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/crm/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/crm/opportunities/{id}/status": {
      "patch": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/crm/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/crm/pipeline/stats": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/crm/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/crm/reports/loss-reasons": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/crm/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/crm/reports/performance": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/crm/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/crm/tasks": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "title",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "description",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "priority",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "due_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "completed_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "client_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "opportunity_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "assigned_to",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/CrmTasks"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister crm/tasks",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CrmTasks"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CrmTasks"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer crm/tasks",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/crm/tasks/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer crm/tasks",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CrmTasks"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire crm/tasks par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CrmTasks"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CrmTasks"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier crm/tasks",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/dashboard": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/dashboard/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/dashboard/alerts": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "generique:dashboard/alerts (__special__)",
        "x-avia-documented": false
      }
    },
    "/api/v1/dashboard/kpi": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "generique:dashboard/kpi (__special__)",
        "x-avia-documented": false
      }
    },
    "/api/v1/dashboard/kpis": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "generique:dashboard/kpis (__special__)",
        "x-avia-documented": false
      }
    },
    "/api/v1/dashboard/production": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/dashboard/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/dashboard/sales-pipeline": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "generique:dashboard/sales-pipeline (__special__)",
        "x-avia-documented": false
      }
    },
    "/api/v1/dashboard/summary": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "generique:dashboard/summary (__special__)",
        "x-avia-documented": false
      }
    },
    "/api/v1/dashboards/agregats": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/dashboards/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/delivery-note-items": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "delivery_note_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "article_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "sales_order_item_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quantity_delivered",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quantity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "description",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "sort_order",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "unit_price",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "discount",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "discount_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "fodec_rate",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "tax_rate",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "line_total",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "discount_2",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "discount_2_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "lot_number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim1_value_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim2_value_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim_set",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/DeliveryNoteItems"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister delivery-note-items",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DeliveryNoteItems"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeliveryNoteItems"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer delivery-note-items",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/delivery-note-items/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer delivery-note-items",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeliveryNoteItems"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire delivery-note-items par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DeliveryNoteItems"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeliveryNoteItems"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier delivery-note-items",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/delivery-notes": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "delivery_number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "sales_order_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "client_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "delivery_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "carrier",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "tracking_number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "deleted_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "operation_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "archived_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "archived_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "subtotal",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "fodec_amount",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "tax_amount",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "total",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "due_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "contact_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "shipping_cost",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "total_weight",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "total_packages",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "shipping_method",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "shipping_address",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "shipping_city",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "shipping_country",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "actual_delivery",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim1_value_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim2_value_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim_set",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "warehouse_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/DeliveryNotes"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister delivery-notes",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DeliveryNotes"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeliveryNotes"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer delivery-notes",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/delivery-notes/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer delivery-notes",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeliveryNotes"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire delivery-notes par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DeliveryNotes"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeliveryNotes"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier delivery-notes",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/departments": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "code",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "description",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "manager_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "is_active",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "color",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/Departments"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister departments",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Departments"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Departments"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer departments",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/departments/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer departments",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Departments"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire departments par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Departments"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Departments"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier departments",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/depreciation-entries": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "asset_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "period",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "amount",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "accumulated",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/DepreciationEntries"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister depreciation-entries",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DepreciationEntries"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DepreciationEntries"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer depreciation-entries",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/depreciation-entries/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer depreciation-entries",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DepreciationEntries"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire depreciation-entries par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DepreciationEntries"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DepreciationEntries"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier depreciation-entries",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/dim-defaults": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "entity_table",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "entity_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dimension_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "value_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "posting",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/DimDefaults"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister dim-defaults",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DimDefaults"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DimDefaults"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer dim-defaults",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/dim-defaults/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer dim-defaults",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DimDefaults"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire dim-defaults par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DimDefaults"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DimDefaults"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier dim-defaults",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/dim-dimensions": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "code",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "source_table",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "blocked",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "position",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/DimDimensions"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister dim-dimensions",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DimDimensions"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DimDimensions"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer dim-dimensions",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/dim-dimensions/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer dim-dimensions",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DimDimensions"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire dim-dimensions par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DimDimensions"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DimDimensions"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier dim-dimensions",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/dim-forbidden": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dimension_a",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "value_a",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dimension_b",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "value_b",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/DimForbidden"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister dim-forbidden",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DimForbidden"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DimForbidden"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer dim-forbidden",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/dim-forbidden/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer dim-forbidden",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DimForbidden"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire dim-forbidden par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DimForbidden"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DimForbidden"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier dim-forbidden",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/dim-values": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dimension_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "code",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "source_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "blocked",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/DimValues"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister dim-values",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DimValues"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DimValues"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer dim-values",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/dim-values/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer dim-values",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DimValues"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire dim-values par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DimValues"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DimValues"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier dim-values",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/dimensions": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "entity_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "entity_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dimension_key",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dimension_value",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/Dimensions"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister dimensions",
        "tags": [
          "accounting"
        ],
        "x-avia-documented": true,
        "x-avia-module": "accounting"
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Dimensions"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Dimensions"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer dimensions",
        "tags": [
          "accounting"
        ],
        "x-avia-documented": true,
        "x-avia-module": "accounting"
      }
    },
    "/api/v1/dimensions/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer dimensions",
        "tags": [
          "accounting"
        ],
        "x-avia-documented": true,
        "x-avia-module": "accounting"
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Dimensions"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire dimensions par id",
        "tags": [
          "accounting"
        ],
        "x-avia-documented": true,
        "x-avia-module": "accounting"
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Dimensions"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Dimensions"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier dimensions",
        "tags": [
          "accounting"
        ],
        "x-avia-documented": true,
        "x-avia-module": "accounting"
      }
    },
    "/api/v1/discount-rules": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "value",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "min_quantity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "min_amount",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "client_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "article_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "start_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "end_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "active",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/DiscountRules"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister discount-rules",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DiscountRules"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DiscountRules"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer discount-rules",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/discount-rules/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer discount-rules",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DiscountRules"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire discount-rules par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DiscountRules"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DiscountRules"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier discount-rules",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/document-control": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "document_number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "title",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "category",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "version",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "content_url",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "author_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "reviewer_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "approver_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "approved_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "review_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "next_review",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "tags",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "deleted_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "article_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/DocumentControl"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister document-control",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DocumentControl"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DocumentControl"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer document-control",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/document-control/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer document-control",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DocumentControl"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire document-control par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DocumentControl"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DocumentControl"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier document-control",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/document-flow/{type}/{id}": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "cmd/business-service/main.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/documents": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "entity_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "entity_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "file_url",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "file_size",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "mime_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "version",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "uploaded_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/Documents"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister documents",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Documents"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Documents"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer documents",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/documents/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer documents",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Documents"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire documents par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Documents"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Documents"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier documents",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/documents/{id}/approve": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/doccontrol/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/dunning-history": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "invoice_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "client_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dunning_level_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "sent_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/DunningHistory"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister dunning-history",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DunningHistory"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DunningHistory"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer dunning-history",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/dunning-history/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer dunning-history",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DunningHistory"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire dunning-history par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DunningHistory"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DunningHistory"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier dunning-history",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/dunning-levels": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "level",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "days_overdue",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "fee_amount",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "template",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "active",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/DunningLevels"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister dunning-levels",
        "tags": [
          "accounting"
        ],
        "x-avia-documented": true,
        "x-avia-module": "accounting"
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DunningLevels"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DunningLevels"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer dunning-levels",
        "tags": [
          "accounting"
        ],
        "x-avia-documented": true,
        "x-avia-module": "accounting"
      }
    },
    "/api/v1/dunning-levels/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer dunning-levels",
        "tags": [
          "accounting"
        ],
        "x-avia-documented": true,
        "x-avia-module": "accounting"
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DunningLevels"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire dunning-levels par id",
        "tags": [
          "accounting"
        ],
        "x-avia-documented": true,
        "x-avia-module": "accounting"
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DunningLevels"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DunningLevels"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier dunning-levels",
        "tags": [
          "accounting"
        ],
        "x-avia-documented": true,
        "x-avia-module": "accounting"
      }
    },
    "/api/v1/e-invoices": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "invoice_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "invoice_number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "format",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "xml_content",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "json_content",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "seller",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "buyer",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "lines",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "subtotal",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "tax_amount",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "total",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "currency",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "fiscal_stamp",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "digital_signature",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "qr_code_data",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "hash",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "sent_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "accepted_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "rejection_reason",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "archive_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "archive_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "retention_until",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "invoice_type_code",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "ttn_receipt_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/EInvoices"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister e-invoices",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EInvoices"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EInvoices"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer e-invoices",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/e-invoices/generate": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/einvoice/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/e-invoices/stats": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/einvoice/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/e-invoices/validate-tax-id": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/einvoice/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/e-invoices/webhook/logs": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/einvoice/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/e-invoices/webhook/ppf": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/einvoice/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/e-invoices/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer e-invoices",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EInvoices"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire e-invoices par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EInvoices"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EInvoices"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier e-invoices",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/e-invoices/{id}/download": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/einvoice/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/e-invoices/{id}/el-fatoora": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/einvoice/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/e-invoices/{id}/el-fatoora/validate": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/einvoice/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/e-invoices/{id}/send": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/einvoice/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/e-invoices/{id}/submit-ttn": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/einvoice/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/edi-messages": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "partner_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "direction",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "message_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "content",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "error_message",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "processed_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "message_number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "document_ref",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "sent_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/EdiMessages"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister edi-messages",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EdiMessages"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EdiMessages"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer edi-messages",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/edi-messages/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer edi-messages",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EdiMessages"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire edi-messages par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EdiMessages"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EdiMessages"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier edi-messages",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/edi-partners": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "partner_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "protocol",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "endpoint_url",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "api_key",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "active",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "partner_code",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "auth_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "document_types",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/EdiPartners"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister edi-partners",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EdiPartners"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EdiPartners"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer edi-partners",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/edi-partners/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer edi-partners",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EdiPartners"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire edi-partners par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EdiPartners"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EdiPartners"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier edi-partners",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/email-tracking": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "entity_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "entity_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "recipient",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "subject",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "sent_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "opened_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "interaction_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "recipient_email",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "open_count",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "click_count",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "clicked_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "clicked_url",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "user_agent",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "ip_address",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "bounce_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "acs_message_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "source",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "campaign_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/EmailTracking"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister email-tracking",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EmailTracking"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EmailTracking"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer email-tracking",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/email-tracking/webhook": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "cmd/business-service/main.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/email-tracking/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer email-tracking",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EmailTracking"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire email-tracking par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EmailTracking"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EmailTracking"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier email-tracking",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/email-tracking/{id}/click": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "cmd/business-service/main.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/email-tracking/{id}/open": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "cmd/business-service/main.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/email-unsubscribes": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "email",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "reason",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "source",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "tracking_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "client_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/EmailUnsubscribes"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister email-unsubscribes",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EmailUnsubscribes"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EmailUnsubscribes"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer email-unsubscribes",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/email-unsubscribes/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer email-unsubscribes",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EmailUnsubscribes"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire email-unsubscribes par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EmailUnsubscribes"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EmailUnsubscribes"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier email-unsubscribes",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/employee-daily-reports": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "report_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "user_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "employee_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "department",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "author_name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "summary",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "tasks_completed",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "tasks_planned",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "blockers",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "hours_worked",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "affair_refs",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "lean_tags",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "submitted_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "linked_affairs",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "linked_das",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "linked_mos",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/EmployeeDailyReports"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister employee-daily-reports",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EmployeeDailyReports"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EmployeeDailyReports"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer employee-daily-reports",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/employee-daily-reports/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer employee-daily-reports",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EmployeeDailyReports"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire employee-daily-reports par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EmployeeDailyReports"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EmployeeDailyReports"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier employee-daily-reports",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/employee-planned-tasks": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "user_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "employee_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "assignee_name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "department",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "title",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "description",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "planned_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "estimated_hours",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "priority",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "source",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "daily_report_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "affair_refs",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "methodology_tags",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "ai_rationale",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "position",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "completed_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/EmployeePlannedTasks"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister employee-planned-tasks",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EmployeePlannedTasks"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EmployeePlannedTasks"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer employee-planned-tasks",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/employee-planned-tasks/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer employee-planned-tasks",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EmployeePlannedTasks"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire employee-planned-tasks par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EmployeePlannedTasks"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EmployeePlannedTasks"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier employee-planned-tasks",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/employees": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "user_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "employee_number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "first_name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "last_name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "email",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "phone",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "position",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "department",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "hire_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "contract_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "hourly_rate",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "is_active",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "deleted_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "cin",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "passport",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "nationality",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "gender",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "birth_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "marital_status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dependents",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "blood_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "address",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "city",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "postal_code",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "country",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "emergency_contact",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "emergency_phone",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "emergency_relation",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "qualification",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "diploma",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "manager",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "gross_salary",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "salary_mode",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "cnss_number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "tax_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "bank_name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "bank_account",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "annual_leave_balance",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "sick_leave_balance",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "leave_group",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "work_schedule",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "internal_memo",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "end_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/Employees"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister employees",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Employees"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Employees"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer employees",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/employees/stats": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/hr/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/employees/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer employees",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Employees"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire employees par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Employees"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Employees"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier employees",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/employment-contracts": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "employee_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "contract_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "start_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "end_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "salary",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "currency",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "hours_per_week",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "document_url",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "contract_number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "transport_allowance",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "meal_allowance",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "housing_allowance",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "other_allowances",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "leave_days_per_year",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notice_period_days",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "position",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "department",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "trial_end_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/EmploymentContracts"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister employment-contracts",
        "tags": [
          "hr"
        ],
        "x-avia-documented": true,
        "x-avia-module": "hr"
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EmploymentContracts"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EmploymentContracts"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer employment-contracts",
        "tags": [
          "hr"
        ],
        "x-avia-documented": true,
        "x-avia-module": "hr"
      }
    },
    "/api/v1/employment-contracts/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer employment-contracts",
        "tags": [
          "hr"
        ],
        "x-avia-documented": true,
        "x-avia-module": "hr"
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EmploymentContracts"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire employment-contracts par id",
        "tags": [
          "hr"
        ],
        "x-avia-documented": true,
        "x-avia-module": "hr"
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EmploymentContracts"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EmploymentContracts"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier employment-contracts",
        "tags": [
          "hr"
        ],
        "x-avia-documented": true,
        "x-avia-module": "hr"
      }
    },
    "/api/v1/equipment-serial-history": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "equipment_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "serial_number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "changed_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "changed_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "changed_by_name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "source",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/EquipmentSerialHistory"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister equipment-serial-history",
        "tags": [
          "interventions"
        ],
        "x-avia-documented": true,
        "x-avia-module": "interventions"
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EquipmentSerialHistory"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EquipmentSerialHistory"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer equipment-serial-history",
        "tags": [
          "interventions"
        ],
        "x-avia-documented": true,
        "x-avia-module": "interventions"
      }
    },
    "/api/v1/equipment-serial-history/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer equipment-serial-history",
        "tags": [
          "interventions"
        ],
        "x-avia-documented": true,
        "x-avia-module": "interventions"
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EquipmentSerialHistory"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire equipment-serial-history par id",
        "tags": [
          "interventions"
        ],
        "x-avia-documented": true,
        "x-avia-module": "interventions"
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EquipmentSerialHistory"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EquipmentSerialHistory"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier equipment-serial-history",
        "tags": [
          "interventions"
        ],
        "x-avia-documented": true,
        "x-avia-module": "interventions"
      }
    },
    "/api/v1/event-logs": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "event_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "entity_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "entity_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "user_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "data",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/EventLogs"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister event-logs",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EventLogs"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EventLogs"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer event-logs",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/event-logs/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer event-logs",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EventLogs"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire event-logs par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EventLogs"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EventLogs"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier event-logs",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/exchange-rates": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "from_currency",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "to_currency",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "rate",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "effective_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "inverse_rate",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "source",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/ExchangeRates"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister exchange-rates",
        "tags": [
          "accounting"
        ],
        "x-avia-documented": true,
        "x-avia-module": "accounting"
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ExchangeRates"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExchangeRates"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer exchange-rates",
        "tags": [
          "accounting"
        ],
        "x-avia-documented": true,
        "x-avia-module": "accounting"
      }
    },
    "/api/v1/exchange-rates/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer exchange-rates",
        "tags": [
          "accounting"
        ],
        "x-avia-documented": true,
        "x-avia-module": "accounting"
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExchangeRates"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire exchange-rates par id",
        "tags": [
          "accounting"
        ],
        "x-avia-documented": true,
        "x-avia-module": "accounting"
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ExchangeRates"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExchangeRates"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier exchange-rates",
        "tags": [
          "accounting"
        ],
        "x-avia-documented": true,
        "x-avia-module": "accounting"
      }
    },
    "/api/v1/expense-report-lines": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "report_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "category",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "description",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "amount",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "currency",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "receipt_url",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/ExpenseReportLines"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister expense-report-lines",
        "tags": [
          "treasury"
        ],
        "x-avia-documented": true,
        "x-avia-module": "treasury"
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ExpenseReportLines"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExpenseReportLines"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer expense-report-lines",
        "tags": [
          "treasury"
        ],
        "x-avia-documented": true,
        "x-avia-module": "treasury"
      }
    },
    "/api/v1/expense-report-lines/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer expense-report-lines",
        "tags": [
          "treasury"
        ],
        "x-avia-documented": true,
        "x-avia-module": "treasury"
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExpenseReportLines"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire expense-report-lines par id",
        "tags": [
          "treasury"
        ],
        "x-avia-documented": true,
        "x-avia-module": "treasury"
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ExpenseReportLines"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExpenseReportLines"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier expense-report-lines",
        "tags": [
          "treasury"
        ],
        "x-avia-documented": true,
        "x-avia-module": "treasury"
      }
    },
    "/api/v1/expense-reports": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "report_number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "employee_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "employee_name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "title",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "description",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "total_amount",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "currency",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "submission_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "approval_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "approver_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "approver_name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "rejection_reason",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "payment_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/ExpenseReports"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister expense-reports",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ExpenseReports"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExpenseReports"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer expense-reports",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/expense-reports/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer expense-reports",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExpenseReports"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire expense-reports par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ExpenseReports"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExpenseReports"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier expense-reports",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/field-changes": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "table_name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "record_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "column_name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "old_value",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "new_value",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "changed_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "changed_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/FieldChanges"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister field-changes",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/field-changes/{id}": {
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FieldChanges"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire field-changes par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/finance/accounting-periods": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/finance/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/finance/accounting-periods/{period}": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/finance/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/finance/accounting-periods/{period}/close": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/finance/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/finance/accounting-periods/{period}/reopen": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/finance/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/finance/analytics/mv-history": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/finance/interfaces/http/financial_reports_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/finance/analytics/refresh-mv": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/finance/interfaces/http/financial_reports_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/finance/cash-disbursements": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/finance/interfaces/http/handler.go",
        "x-avia-documented": false
      },
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/finance/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/finance/cash-receipts": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/finance/interfaces/http/handler.go",
        "x-avia-documented": false
      },
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/finance/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/finance/consolidation/fx": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/finance/interfaces/http/financial_reports_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/finance/consolidation/mark": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/finance/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/finance/consolidation/pnl": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/finance/interfaces/http/financial_reports_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/finance/consolidation/summary": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/finance/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/finance/cost-centers": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/finance/interfaces/http/handler.go",
        "x-avia-documented": false
      },
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/finance/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/finance/cost-centers/{id}": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/finance/interfaces/http/handler.go",
        "x-avia-documented": false
      },
      "put": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/finance/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/finance/cost-centers/{id}/entries": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/finance/interfaces/http/handler.go",
        "x-avia-documented": false
      },
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/finance/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/finance/datasets/powerbi": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/finance/interfaces/http/financial_reports_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/finance/exchange-rates": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/finance/interfaces/http/handler.go",
        "x-avia-documented": false
      },
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/finance/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/finance/exchange-rates/latest": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/finance/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/finance/fiscal-years": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/finance/interfaces/http/handler.go",
        "x-avia-documented": false
      },
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/finance/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/finance/fiscal-years/{id}/close": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/finance/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/finance/fixed-assets": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "code",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "category_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "acquisition_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "acquisition_cost",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "current_value",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "location",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "residual_value",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "useful_life_months",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "depreciation_method",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "accumulated_depreciation",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "net_book_value",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "serial_number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "description",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/FixedAssets"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister finance/fixed-assets",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/FixedAssets"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FixedAssets"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer finance/fixed-assets",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/finance/fixed-assets/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer finance/fixed-assets",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FixedAssets"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire finance/fixed-assets par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/FixedAssets"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FixedAssets"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier finance/fixed-assets",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/finance/liasse/annexes": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/finance/interfaces/http/fiscal_liasse_handler.go",
        "x-avia-documented": false
      },
      "put": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/finance/interfaces/http/fiscal_liasse_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/finance/liasse/annexes/prefill": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/finance/interfaces/http/fiscal_liasse_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/finance/liasse/coherence": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/finance/interfaces/http/fiscal_liasse_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/finance/liasse/declarations": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/finance/interfaces/http/fiscal_liasse_handler.go",
        "x-avia-documented": false
      },
      "put": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/finance/interfaces/http/fiscal_liasse_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/finance/liasse/exercices": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/finance/interfaces/http/fiscal_liasse_handler.go",
        "x-avia-documented": false
      },
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/finance/interfaces/http/fiscal_liasse_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/finance/liasse/export-zip": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/finance/interfaces/http/fiscal_liasse_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/finance/liasse/prefill": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/finance/interfaces/http/fiscal_liasse_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/finance/payments": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/finance/interfaces/http/handler.go",
        "x-avia-documented": false
      },
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/finance/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/finance/reports/affair-pnl": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/finance/interfaces/http/financial_reports_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/finance/reports/balance-sheet": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/finance/interfaces/http/financial_reports_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/finance/reports/budget-variance": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/finance/interfaces/http/financial_reports_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/finance/reports/cash-flow-forecast": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/finance/interfaces/http/financial_reports_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/finance/reports/executive-summary": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/finance/interfaces/http/financial_reports_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/finance/reports/fec/export": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/finance/interfaces/http/financial_reports_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/finance/reports/fec/validate": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/finance/interfaces/http/financial_reports_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/finance/reports/income-statement": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/finance/interfaces/http/financial_reports_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/finance/reports/interco-eliminations": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/finance/interfaces/http/financial_reports_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/finance/reports/interco-eliminations/apply": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/finance/interfaces/http/financial_reports_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/finance/reports/interco-eliminations/post-journal": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/finance/interfaces/http/financial_reports_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/finance/reports/nl-query": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/finance/interfaces/http/financial_reports_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/finance/reports/period-close-pack": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/finance/interfaces/http/financial_reports_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/finance/reports/scheduled": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/finance/interfaces/http/financial_reports_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/finance/reports/scheduled/run": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/finance/interfaces/http/financial_reports_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/finance/reports/shopfloor-profitability": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/finance/interfaces/http/financial_reports_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/finance/reports/trial-balance": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/finance/interfaces/http/financial_reports_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/finance/reports/working-capital": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/finance/interfaces/http/financial_reports_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/fiscal-periods": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "period",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "fiscal_year",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "month",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "closed_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "closed_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/FiscalPeriods"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister fiscal-periods",
        "tags": [
          "accounting"
        ],
        "x-avia-documented": true,
        "x-avia-module": "accounting"
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/FiscalPeriods"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FiscalPeriods"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer fiscal-periods",
        "tags": [
          "accounting"
        ],
        "x-avia-documented": true,
        "x-avia-module": "accounting"
      }
    },
    "/api/v1/fiscal-periods/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer fiscal-periods",
        "tags": [
          "accounting"
        ],
        "x-avia-documented": true,
        "x-avia-module": "accounting"
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FiscalPeriods"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire fiscal-periods par id",
        "tags": [
          "accounting"
        ],
        "x-avia-documented": true,
        "x-avia-module": "accounting"
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/FiscalPeriods"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FiscalPeriods"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier fiscal-periods",
        "tags": [
          "accounting"
        ],
        "x-avia-documented": true,
        "x-avia-module": "accounting"
      }
    },
    "/api/v1/fiscal-years": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "year",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "start_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "end_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "is_closed",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/FiscalYears"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister fiscal-years",
        "tags": [
          "accounting"
        ],
        "x-avia-documented": true,
        "x-avia-module": "accounting"
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/FiscalYears"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FiscalYears"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer fiscal-years",
        "tags": [
          "accounting"
        ],
        "x-avia-documented": true,
        "x-avia-module": "accounting"
      }
    },
    "/api/v1/fiscal-years/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer fiscal-years",
        "tags": [
          "accounting"
        ],
        "x-avia-documented": true,
        "x-avia-module": "accounting"
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FiscalYears"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire fiscal-years par id",
        "tags": [
          "accounting"
        ],
        "x-avia-documented": true,
        "x-avia-module": "accounting"
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/FiscalYears"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FiscalYears"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier fiscal-years",
        "tags": [
          "accounting"
        ],
        "x-avia-documented": true,
        "x-avia-module": "accounting"
      }
    },
    "/api/v1/fmea-items": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "fmea_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "failure_mode",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "effect",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "cause",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "severity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "occurrence",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "detection",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "rpn",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "current_controls",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "recommended_action",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "responsible",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "target_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "study_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "process_step",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "failure_effect",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "failure_cause",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "action_taken",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "new_severity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "new_occurrence",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "new_detection",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "new_rpn",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/FmeaItems"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister fmea-items",
        "tags": [
          "quality"
        ],
        "x-avia-documented": true,
        "x-avia-module": "quality"
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/FmeaItems"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FmeaItems"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer fmea-items",
        "tags": [
          "quality"
        ],
        "x-avia-documented": true,
        "x-avia-module": "quality"
      }
    },
    "/api/v1/fmea-items/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer fmea-items",
        "tags": [
          "quality"
        ],
        "x-avia-documented": true,
        "x-avia-module": "quality"
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FmeaItems"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire fmea-items par id",
        "tags": [
          "quality"
        ],
        "x-avia-documented": true,
        "x-avia-module": "quality"
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/FmeaItems"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FmeaItems"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier fmea-items",
        "tags": [
          "quality"
        ],
        "x-avia-documented": true,
        "x-avia-module": "quality"
      }
    },
    "/api/v1/fmea-studies": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "title",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "process_name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "team",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "risk_threshold",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "total_rpn",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "average_rpn",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "high_risk_count",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "action_required",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "completed_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "deleted_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "article_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/FmeaStudies"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister fmea-studies",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/FmeaStudies"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FmeaStudies"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer fmea-studies",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/fmea-studies/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer fmea-studies",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FmeaStudies"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire fmea-studies par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/FmeaStudies"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FmeaStudies"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier fmea-studies",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/gdpr-consent": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "user_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "purpose",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "granted",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "granted_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "withdrawn_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "ip_address",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "user_agent",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "version",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/GdprConsent"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister gdpr-consent",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GdprConsent"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GdprConsent"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer gdpr-consent",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/gdpr-consent/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer gdpr-consent",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GdprConsent"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire gdpr-consent par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GdprConsent"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GdprConsent"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier gdpr-consent",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/gdpr/consent": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/gdpr/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/gdpr/consent/{userId}": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/gdpr/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/gdpr/consent/{userId}/{purpose}": {
      "delete": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/gdpr/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/gdpr/consents": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "generique:gdpr/consents (table introuvable dans le schema de reference)",
        "x-avia-documented": false
      }
    },
    "/api/v1/gdpr/requests": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/gdpr/interfaces/http/handler.go",
        "x-avia-documented": false
      },
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/gdpr/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/gdpr/requests/{id}": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/gdpr/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/gdpr/requests/{id}/approve": {
      "put": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/gdpr/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/gdpr/requests/{id}/reject": {
      "put": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/gdpr/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/gdpr/retention-cleanup": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/gdpr/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/gdpr/retention-policies": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "entity_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "retention_days",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "legal_basis",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "description",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "is_active",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/GdprRetentionPolicies"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister gdpr/retention-policies",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GdprRetentionPolicies"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GdprRetentionPolicies"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer gdpr/retention-policies",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/gdpr/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/gdpr/retention-policies/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer gdpr/retention-policies",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GdprRetentionPolicies"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire gdpr/retention-policies par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GdprRetentionPolicies"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GdprRetentionPolicies"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier gdpr/retention-policies",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/gdpr/users/{userId}/anonymize": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/gdpr/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/gdpr/users/{userId}/export": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/gdpr/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/gmao/equipment": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/maintenance/interfaces/http/equipment_handler.go",
        "x-avia-documented": false
      },
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/maintenance/interfaces/http/equipment_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/gmao/equipment/tree": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/maintenance/interfaces/http/equipment_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/gmao/equipment/{id}": {
      "delete": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/maintenance/interfaces/http/equipment_handler.go",
        "x-avia-documented": false
      },
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/maintenance/interfaces/http/equipment_handler.go",
        "x-avia-documented": false
      },
      "put": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/maintenance/interfaces/http/equipment_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/gmao/equipment/{id}/breakdown": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/maintenance/interfaces/http/equipment_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/gmao/equipment/{id}/children": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/maintenance/interfaces/http/equipment_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/gmao/equipment/{id}/maintenance-dates": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/maintenance/interfaces/http/equipment_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/gmao/equipment/{id}/spares": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/maintenance/interfaces/http/equipment_handler.go",
        "x-avia-documented": false
      },
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/maintenance/interfaces/http/equipment_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/gmao/spares/critical-alerts": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/maintenance/interfaces/http/equipment_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/gmao/spares/{id}": {
      "delete": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/maintenance/interfaces/http/equipment_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/group-consolidation-status": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "period",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "company_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "interco_total",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "consolidated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "consolidated_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/GroupConsolidationStatus"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister group-consolidation-status",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GroupConsolidationStatus"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GroupConsolidationStatus"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer group-consolidation-status",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/group-consolidation-status/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer group-consolidation-status",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GroupConsolidationStatus"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire group-consolidation-status par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GroupConsolidationStatus"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GroupConsolidationStatus"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier group-consolidation-status",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/guide-steps": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "guide_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "title",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "description",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "position",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/GuideSteps"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister guide-steps",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GuideSteps"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GuideSteps"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer guide-steps",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/guide-steps/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer guide-steps",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GuideSteps"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire guide-steps par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GuideSteps"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GuideSteps"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier guide-steps",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/hr/competencies": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "description",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "category",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "level",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "is_required",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "department",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "deleted_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/Competencies"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister hr/competencies",
        "tags": [
          "hr"
        ],
        "x-avia-documented": true,
        "x-avia-module": "hr"
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Competencies"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Competencies"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer hr/competencies",
        "tags": [
          "hr"
        ],
        "x-avia-documented": true,
        "x-avia-module": "hr"
      }
    },
    "/api/v1/hr/competencies/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer hr/competencies",
        "tags": [
          "hr"
        ],
        "x-avia-documented": true,
        "x-avia-module": "hr"
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Competencies"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire hr/competencies par id",
        "tags": [
          "hr"
        ],
        "x-avia-documented": true,
        "x-avia-module": "hr"
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Competencies"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Competencies"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier hr/competencies",
        "tags": [
          "hr"
        ],
        "x-avia-documented": true,
        "x-avia-module": "hr"
      }
    },
    "/api/v1/hr/contracts": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "employee_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "contract_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "start_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "end_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "salary",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "currency",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "hours_per_week",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "document_url",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "contract_number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "transport_allowance",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "meal_allowance",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "housing_allowance",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "other_allowances",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "leave_days_per_year",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notice_period_days",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "position",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "department",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "trial_end_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/EmploymentContracts"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister hr/contracts",
        "tags": [
          "hr"
        ],
        "x-avia-documented": true,
        "x-avia-module": "hr"
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EmploymentContracts"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EmploymentContracts"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer hr/contracts",
        "tags": [
          "hr"
        ],
        "x-avia-documented": true,
        "x-avia-module": "hr"
      }
    },
    "/api/v1/hr/contracts/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer hr/contracts",
        "tags": [
          "hr"
        ],
        "x-avia-documented": true,
        "x-avia-module": "hr"
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EmploymentContracts"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire hr/contracts par id",
        "tags": [
          "hr"
        ],
        "x-avia-documented": true,
        "x-avia-module": "hr"
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EmploymentContracts"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EmploymentContracts"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier hr/contracts",
        "tags": [
          "hr"
        ],
        "x-avia-documented": true,
        "x-avia-module": "hr"
      }
    },
    "/api/v1/hr/employees": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "user_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "employee_number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "first_name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "last_name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "email",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "phone",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "position",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "department",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "hire_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "contract_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "hourly_rate",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "is_active",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "deleted_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "cin",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "passport",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "nationality",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "gender",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "birth_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "marital_status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dependents",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "blood_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "address",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "city",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "postal_code",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "country",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "emergency_contact",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "emergency_phone",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "emergency_relation",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "qualification",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "diploma",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "manager",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "gross_salary",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "salary_mode",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "cnss_number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "tax_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "bank_name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "bank_account",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "annual_leave_balance",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "sick_leave_balance",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "leave_group",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "work_schedule",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "internal_memo",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "end_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/Employees"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister hr/employees",
        "tags": [
          "hr"
        ],
        "x-avia-documented": true,
        "x-avia-module": "hr"
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Employees"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Employees"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer hr/employees",
        "tags": [
          "hr"
        ],
        "x-avia-documented": true,
        "x-avia-module": "hr"
      }
    },
    "/api/v1/hr/employees/{empId}/competencies": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/hr/interfaces/http/training_handler.go",
        "x-avia-documented": false
      },
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/hr/interfaces/http/training_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/hr/employees/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer hr/employees",
        "tags": [
          "hr"
        ],
        "x-avia-documented": true,
        "x-avia-module": "hr"
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Employees"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire hr/employees par id",
        "tags": [
          "hr"
        ],
        "x-avia-documented": true,
        "x-avia-module": "hr"
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Employees"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Employees"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier hr/employees",
        "tags": [
          "hr"
        ],
        "x-avia-documented": true,
        "x-avia-module": "hr"
      }
    },
    "/api/v1/hr/leave-requests": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "employee_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "leave_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "start_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "end_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "days",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "reason",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "approved_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "approved_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/LeaveRequests"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister hr/leave-requests",
        "tags": [
          "hr"
        ],
        "x-avia-documented": true,
        "x-avia-module": "hr"
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LeaveRequests"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LeaveRequests"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer hr/leave-requests",
        "tags": [
          "hr"
        ],
        "x-avia-documented": true,
        "x-avia-module": "hr"
      }
    },
    "/api/v1/hr/leave-requests/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer hr/leave-requests",
        "tags": [
          "hr"
        ],
        "x-avia-documented": true,
        "x-avia-module": "hr"
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LeaveRequests"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire hr/leave-requests par id",
        "tags": [
          "hr"
        ],
        "x-avia-documented": true,
        "x-avia-module": "hr"
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LeaveRequests"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LeaveRequests"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier hr/leave-requests",
        "tags": [
          "hr"
        ],
        "x-avia-documented": true,
        "x-avia-module": "hr"
      }
    },
    "/api/v1/hr/training/expiring": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/hr/interfaces/http/training_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/hr/training/gaps": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/hr/interfaces/http/training_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/hr/training/overdue": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "generique:hr/training/overdue (table introuvable dans le schema de reference)",
        "x-avia-documented": false
      }
    },
    "/api/v1/hr/training/programs": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "title",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "description",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "duration",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "competency_ids",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "provider",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "max_participants",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "is_mandatory",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "recurrence_months",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "deleted_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/TrainingPrograms"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister hr/training/programs",
        "tags": [
          "hr"
        ],
        "x-avia-documented": true,
        "x-avia-module": "hr"
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TrainingPrograms"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TrainingPrograms"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer hr/training/programs",
        "tags": [
          "hr"
        ],
        "x-avia-documented": true,
        "x-avia-module": "hr"
      }
    },
    "/api/v1/hr/training/programs/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer hr/training/programs",
        "tags": [
          "hr"
        ],
        "x-avia-documented": true,
        "x-avia-module": "hr"
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TrainingPrograms"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire hr/training/programs par id",
        "tags": [
          "hr"
        ],
        "x-avia-documented": true,
        "x-avia-module": "hr"
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TrainingPrograms"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TrainingPrograms"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier hr/training/programs",
        "tags": [
          "hr"
        ],
        "x-avia-documented": true,
        "x-avia-module": "hr"
      }
    },
    "/api/v1/hr/training/records": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "employee_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "program_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "score",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "completed_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "expires_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "certificate_url",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "trainer_name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "feedback",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "effectiveness_rating",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/TrainingRecords"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister hr/training/records",
        "tags": [
          "hr"
        ],
        "x-avia-documented": true,
        "x-avia-module": "hr"
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TrainingRecords"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TrainingRecords"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer hr/training/records",
        "tags": [
          "hr"
        ],
        "x-avia-documented": true,
        "x-avia-module": "hr"
      }
    },
    "/api/v1/hr/training/records/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer hr/training/records",
        "tags": [
          "hr"
        ],
        "x-avia-documented": true,
        "x-avia-module": "hr"
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TrainingRecords"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire hr/training/records par id",
        "tags": [
          "hr"
        ],
        "x-avia-documented": true,
        "x-avia-module": "hr"
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TrainingRecords"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TrainingRecords"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier hr/training/records",
        "tags": [
          "hr"
        ],
        "x-avia-documented": true,
        "x-avia-module": "hr"
      }
    },
    "/api/v1/improvement-projects": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "description",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "methodology",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "priority",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "expected_savings",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "actual_savings",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "start_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "end_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "owner_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "title",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "target_process",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "current_value",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "target_value",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "unit",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "estimated_gain",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "actual_gain",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "target_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dmaic_define",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dmaic_measure",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dmaic_analyze",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dmaic_improve",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dmaic_control",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "deleted_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/ImprovementProjects"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister improvement-projects",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ImprovementProjects"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ImprovementProjects"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer improvement-projects",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/improvement-projects/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer improvement-projects",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ImprovementProjects"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire improvement-projects par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ImprovementProjects"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ImprovementProjects"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier improvement-projects",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/incidents": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "incident_number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "severity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "category",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "title",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "description",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "impact",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "containment",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "eradication",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "recovery",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "lessons_learned",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "reporter_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "handler_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "reported_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "resolved_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/SecurityIncidents"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister incidents",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SecurityIncidents"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SecurityIncidents"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer incidents",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/incidents/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer incidents",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SecurityIncidents"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire incidents par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SecurityIncidents"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SecurityIncidents"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier incidents",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/incidents/{id}/resolve": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/incident/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/incidents/{id}/status": {
      "patch": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/incident/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/integrations/e-invoicing": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/einvoice/interfaces/http/integrations.go",
        "x-avia-documented": false
      },
      "put": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/einvoice/interfaces/http/integrations.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/integrations/e-invoicing/test-connection": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/einvoice/interfaces/http/integrations.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/integrations/landing-sync": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/einvoice/interfaces/http/integrations.go",
        "x-avia-documented": false
      },
      "put": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/einvoice/interfaces/http/integrations.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/integrations/landing-sync/health-check": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/einvoice/interfaces/http/integrations.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/integrations/landing-sync/run": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/einvoice/interfaces/http/integrations.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/integrations/portal-payment": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/einvoice/interfaces/http/integrations.go",
        "x-avia-documented": false
      },
      "put": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/einvoice/interfaces/http/integrations.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/integrations/portal-tenant-sync": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/einvoice/interfaces/http/integrations.go",
        "x-avia-documented": false
      },
      "put": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/einvoice/interfaces/http/integrations.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/integrations/portal-tenant-sync/report": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/einvoice/interfaces/http/integrations.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/intercompany-billings": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "from_entity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "to_entity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "amount",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "currency",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "reference",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "period",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/IntercompanyBillings"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister intercompany-billings",
        "tags": [
          "accounting"
        ],
        "x-avia-documented": true,
        "x-avia-module": "accounting"
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/IntercompanyBillings"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IntercompanyBillings"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer intercompany-billings",
        "tags": [
          "accounting"
        ],
        "x-avia-documented": true,
        "x-avia-module": "accounting"
      }
    },
    "/api/v1/intercompany-billings/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer intercompany-billings",
        "tags": [
          "accounting"
        ],
        "x-avia-documented": true,
        "x-avia-module": "accounting"
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IntercompanyBillings"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire intercompany-billings par id",
        "tags": [
          "accounting"
        ],
        "x-avia-documented": true,
        "x-avia-module": "accounting"
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/IntercompanyBillings"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IntercompanyBillings"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier intercompany-billings",
        "tags": [
          "accounting"
        ],
        "x-avia-documented": true,
        "x-avia-module": "accounting"
      }
    },
    "/api/v1/intervention-parts": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "intervention_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "article_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quantity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "unit_price",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/InterventionParts"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister intervention-parts",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/InterventionParts"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InterventionParts"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer intervention-parts",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/intervention-parts/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer intervention-parts",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InterventionParts"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire intervention-parts par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/InterventionParts"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InterventionParts"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier intervention-parts",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/intervention-spare-parts": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "intervention_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "spare_part_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quantity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "unit_price",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/InterventionSpareParts"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister intervention-spare-parts",
        "tags": [
          "interventions"
        ],
        "x-avia-documented": true,
        "x-avia-module": "interventions"
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/InterventionSpareParts"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InterventionSpareParts"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer intervention-spare-parts",
        "tags": [
          "interventions"
        ],
        "x-avia-documented": true,
        "x-avia-module": "interventions"
      }
    },
    "/api/v1/intervention-spare-parts/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer intervention-spare-parts",
        "tags": [
          "interventions"
        ],
        "x-avia-documented": true,
        "x-avia-module": "interventions"
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InterventionSpareParts"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire intervention-spare-parts par id",
        "tags": [
          "interventions"
        ],
        "x-avia-documented": true,
        "x-avia-module": "interventions"
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/InterventionSpareParts"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InterventionSpareParts"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier intervention-spare-parts",
        "tags": [
          "interventions"
        ],
        "x-avia-documented": true,
        "x-avia-module": "interventions"
      }
    },
    "/api/v1/intervention-types": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "code",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "category",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "estimated_duration",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "description",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "is_active",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/InterventionTypes"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister intervention-types",
        "tags": [
          "interventions"
        ],
        "x-avia-documented": true,
        "x-avia-module": "interventions"
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/InterventionTypes"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InterventionTypes"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer intervention-types",
        "tags": [
          "interventions"
        ],
        "x-avia-documented": true,
        "x-avia-module": "interventions"
      }
    },
    "/api/v1/intervention-types/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer intervention-types",
        "tags": [
          "interventions"
        ],
        "x-avia-documented": true,
        "x-avia-module": "interventions"
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InterventionTypes"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire intervention-types par id",
        "tags": [
          "interventions"
        ],
        "x-avia-documented": true,
        "x-avia-module": "interventions"
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/InterventionTypes"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InterventionTypes"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier intervention-types",
        "tags": [
          "interventions"
        ],
        "x-avia-documented": true,
        "x-avia-module": "interventions"
      }
    },
    "/api/v1/inventories": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "inventory_number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "warehouse_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "inventory_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/Inventories"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister inventories",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Inventories"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Inventories"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer inventories",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/inventories/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer inventories",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Inventories"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire inventories par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Inventories"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Inventories"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier inventories",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/inventory-lines": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "inventory_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "article_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "expected_qty",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "counted_qty",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "variance",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "lot_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/InventoryLines"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister inventory-lines",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/InventoryLines"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InventoryLines"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer inventory-lines",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/inventory-lines/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer inventory-lines",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InventoryLines"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire inventory-lines par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/InventoryLines"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InventoryLines"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier inventory-lines",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/invoice-items": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "invoice_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "article_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "description",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quantity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "unit_price",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "discount",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "tax_rate",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "total",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "position",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "discount_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "fodec_rate",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "sort_order",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "unit",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "discount_2",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "discount_2_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim1_value_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim2_value_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim_set",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/InvoiceItems"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister invoice-items",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/InvoiceItems"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InvoiceItems"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer invoice-items",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/invoice-items/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer invoice-items",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InvoiceItems"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire invoice-items par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/InvoiceItems"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InvoiceItems"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier invoice-items",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/invoices": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "client_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quote_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "due_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "subtotal",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "tax_amount",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "total",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "amount_paid",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "deleted_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "payment_status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "sales_order_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "delivery_note_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "invoice_number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "issue_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "discount",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "fodec_amount",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "stamp_duty",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "withholding_tax_rate",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "advance_deduction",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "terms",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "payment_term_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "payment_method",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "invoice_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "operation_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "currency",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "exchange_rate",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "subject",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "customer_po",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "incoterms",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "delivery_address",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "project_ref",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "affair_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "archived_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "archived_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "intervention_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "intervention_ref",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "portal_payment_status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "portal_payment_reference",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "discount_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "discount_2",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "discount_2_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "contact_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim1_value_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim2_value_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim_set",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "warehouse_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/Invoices"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister invoices",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Invoices"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Invoices"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer invoices",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/invoices/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer invoices",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Invoices"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire invoices par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Invoices"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Invoices"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier invoices",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/invoices/{id}/pay": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/invoice/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/invoices/{id}/portal-payment": {
      "patch": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/invoice/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/invoices/{id}/status": {
      "patch": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/invoice/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/iso-traceability-logs": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "standard",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "clause",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "entity_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "entity_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "action",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "performed_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "performed_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "evidence_url",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "metadata",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/IsoTraceabilityLog"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister iso-traceability-logs",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/IsoTraceabilityLog"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IsoTraceabilityLog"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer iso-traceability-logs",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/iso-traceability-logs/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer iso-traceability-logs",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IsoTraceabilityLog"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire iso-traceability-logs par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/IsoTraceabilityLog"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IsoTraceabilityLog"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier iso-traceability-logs",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/lean/5s-audits": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "area",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "audit_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "auditor_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "sort_score",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "set_in_order_score",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "shine_score",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "standardize_score",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "sustain_score",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "observations",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "workstation_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "workstation_name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "auditor",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "seiri_score",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "seiton_score",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "seiso_score",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "seiketsu_score",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "shitsuke_score",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "action_plan",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "deleted_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "details",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "total_score",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/Audits5s"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister lean/5s-audits",
        "tags": [
          "lean"
        ],
        "x-avia-documented": true,
        "x-avia-module": "lean"
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Audits5s"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Audits5s"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer lean/5s-audits",
        "tags": [
          "lean"
        ],
        "x-avia-documented": true,
        "x-avia-module": "lean"
      }
    },
    "/api/v1/lean/5s-audits/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer lean/5s-audits",
        "tags": [
          "lean"
        ],
        "x-avia-documented": true,
        "x-avia-module": "lean"
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Audits5s"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire lean/5s-audits par id",
        "tags": [
          "lean"
        ],
        "x-avia-documented": true,
        "x-avia-module": "lean"
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Audits5s"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Audits5s"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier lean/5s-audits",
        "tags": [
          "lean"
        ],
        "x-avia-documented": true,
        "x-avia-module": "lean"
      }
    },
    "/api/v1/lean/projects": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "description",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "methodology",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "priority",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "expected_savings",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "actual_savings",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "start_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "end_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "owner_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "title",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "target_process",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "current_value",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "target_value",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "unit",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "estimated_gain",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "actual_gain",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "target_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dmaic_define",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dmaic_measure",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dmaic_analyze",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dmaic_improve",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dmaic_control",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "deleted_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/ImprovementProjects"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister lean/projects",
        "tags": [
          "lean"
        ],
        "x-avia-documented": true,
        "x-avia-module": "lean"
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ImprovementProjects"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ImprovementProjects"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer lean/projects",
        "tags": [
          "lean"
        ],
        "x-avia-documented": true,
        "x-avia-module": "lean"
      }
    },
    "/api/v1/lean/projects/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer lean/projects",
        "tags": [
          "lean"
        ],
        "x-avia-documented": true,
        "x-avia-module": "lean"
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ImprovementProjects"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire lean/projects par id",
        "tags": [
          "lean"
        ],
        "x-avia-documented": true,
        "x-avia-module": "lean"
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ImprovementProjects"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ImprovementProjects"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier lean/projects",
        "tags": [
          "lean"
        ],
        "x-avia-documented": true,
        "x-avia-module": "lean"
      }
    },
    "/api/v1/lean/samed-checklists": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "area",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "items",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "last_checked",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "context_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "context_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "security_ok",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "security_comment",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "supply_ok",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "supply_comment",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "workforce_ok",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "workforce_comment",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "equipment_ok",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "equipment_comment",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "documentation_ok",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "documentation_comment",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "overall_status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "validated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "deleted_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/SamedChecklists"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister lean/samed-checklists",
        "tags": [
          "lean"
        ],
        "x-avia-documented": true,
        "x-avia-module": "lean"
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SamedChecklists"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SamedChecklists"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer lean/samed-checklists",
        "tags": [
          "lean"
        ],
        "x-avia-documented": true,
        "x-avia-module": "lean"
      }
    },
    "/api/v1/lean/samed-checklists/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer lean/samed-checklists",
        "tags": [
          "lean"
        ],
        "x-avia-documented": true,
        "x-avia-module": "lean"
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SamedChecklists"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire lean/samed-checklists par id",
        "tags": [
          "lean"
        ],
        "x-avia-documented": true,
        "x-avia-module": "lean"
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SamedChecklists"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SamedChecklists"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier lean/samed-checklists",
        "tags": [
          "lean"
        ],
        "x-avia-documented": true,
        "x-avia-module": "lean"
      }
    },
    "/api/v1/lean/smed-operations": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "smed_study_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "duration",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "operation_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "can_externalize",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "improvement",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "new_duration",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "position",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "sequence",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "description",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "current_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "current_duration",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "improved_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "improved_duration",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "improvement_action",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/SmedOperations"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister lean/smed-operations",
        "tags": [
          "lean"
        ],
        "x-avia-documented": true,
        "x-avia-module": "lean"
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SmedOperations"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SmedOperations"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer lean/smed-operations",
        "tags": [
          "lean"
        ],
        "x-avia-documented": true,
        "x-avia-module": "lean"
      }
    },
    "/api/v1/lean/smed-operations/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer lean/smed-operations",
        "tags": [
          "lean"
        ],
        "x-avia-documented": true,
        "x-avia-module": "lean"
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SmedOperations"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire lean/smed-operations par id",
        "tags": [
          "lean"
        ],
        "x-avia-documented": true,
        "x-avia-module": "lean"
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SmedOperations"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SmedOperations"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier lean/smed-operations",
        "tags": [
          "lean"
        ],
        "x-avia-documented": true,
        "x-avia-module": "lean"
      }
    },
    "/api/v1/lean/smed-studies": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "workstation_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "current_changeover_time",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "target_changeover_time",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "title",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "achieved_changeover_time",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "reduction_percentage",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "deleted_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/SmedStudies"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister lean/smed-studies",
        "tags": [
          "lean"
        ],
        "x-avia-documented": true,
        "x-avia-module": "lean"
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SmedStudies"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SmedStudies"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer lean/smed-studies",
        "tags": [
          "lean"
        ],
        "x-avia-documented": true,
        "x-avia-module": "lean"
      }
    },
    "/api/v1/lean/smed-studies/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer lean/smed-studies",
        "tags": [
          "lean"
        ],
        "x-avia-documented": true,
        "x-avia-module": "lean"
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SmedStudies"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire lean/smed-studies par id",
        "tags": [
          "lean"
        ],
        "x-avia-documented": true,
        "x-avia-module": "lean"
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SmedStudies"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SmedStudies"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier lean/smed-studies",
        "tags": [
          "lean"
        ],
        "x-avia-documented": true,
        "x-avia-module": "lean"
      }
    },
    "/api/v1/lean/smed-studies/{id}/operations": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/lean/interfaces/http/handler.go",
        "x-avia-documented": false
      },
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/lean/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/leaves": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/hr/interfaces/http/handler.go",
        "x-avia-documented": false
      },
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/hr/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/leaves/balance/{id}": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/hr/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/leaves/{id}/approve": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/hr/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/leaves/{id}/reject": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/hr/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/lot-alerts/expiring": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/stock/interfaces/http/warehouse_lot_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/lot-alerts/quality/{status}": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/stock/interfaces/http/warehouse_lot_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/lot-lookup/number/{number}": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/stock/interfaces/http/warehouse_lot_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/lot-movements": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "lot_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "movement_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quantity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "source_location",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "destination_location",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "reference",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/LotMovements"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister lot-movements",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LotMovements"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LotMovements"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer lot-movements",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/lot-movements/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer lot-movements",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LotMovements"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire lot-movements par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LotMovements"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LotMovements"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier lot-movements",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/lot-traceability/{id}/downstream": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/stock/interfaces/http/warehouse_lot_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/lot-traceability/{id}/report": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/stock/interfaces/http/warehouse_lot_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/lot-traceability/{id}/upstream": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/stock/interfaces/http/warehouse_lot_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/lot-tracking": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "lot_number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "article_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "supplier_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "supplier_lot",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "manufacturing_order_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quantity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "remaining_quantity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "production_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "expiry_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quality_status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "warehouse_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/LotTracking"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister lot-tracking",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LotTracking"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LotTracking"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer lot-tracking",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/lot-tracking/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer lot-tracking",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LotTracking"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire lot-tracking par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LotTracking"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LotTracking"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier lot-tracking",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/lots": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/stock/interfaces/http/warehouse_lot_handler.go",
        "x-avia-documented": false
      },
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/stock/interfaces/http/warehouse_lot_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/lots/{id}": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/stock/interfaces/http/warehouse_lot_handler.go",
        "x-avia-documented": false
      },
      "put": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/stock/interfaces/http/warehouse_lot_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/lots/{id}/consume": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/stock/interfaces/http/warehouse_lot_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/machine-measurements": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "machine_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "timestamp",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "parameter",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "value",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "unit",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "is_anomaly",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/MachineMeasurements"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister machine-measurements",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MachineMeasurements"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MachineMeasurements"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer machine-measurements",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/machine-measurements/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer machine-measurements",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MachineMeasurements"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire machine-measurements par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MachineMeasurements"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MachineMeasurements"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier machine-measurements",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/machine-stops": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "machine_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "manufacturing_order_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "start_time",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "end_time",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "duration",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "stop_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "cause_code",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "cause_description",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "root_cause",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "action_taken",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "resolved_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/MachineStops"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister machine-stops",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MachineStops"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MachineStops"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer machine-stops",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/machine-stops/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer machine-stops",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MachineStops"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire machine-stops par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MachineStops"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MachineStops"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier machine-stops",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/maintenance": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/maintenance/interfaces/http/handler.go",
        "x-avia-documented": false
      },
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/maintenance/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/maintenance-schedules": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "equipment_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "title",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "description",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "frequency_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "frequency_value",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "last_executed_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "next_due_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "priority",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "assigned_to",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "is_active",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "estimated_duration_hours",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "checklist",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/MaintenanceSchedules"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister maintenance-schedules",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MaintenanceSchedules"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MaintenanceSchedules"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer maintenance-schedules",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/maintenance-schedules/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer maintenance-schedules",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MaintenanceSchedules"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire maintenance-schedules par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MaintenanceSchedules"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MaintenanceSchedules"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier maintenance-schedules",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/maintenance/equipment": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "code",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "parent_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "category",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "manufacturer",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "model",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "serial_number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "installation_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "warranty_expiry",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "location",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "criticality",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "total_breakdowns",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "total_downtime_hours",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "last_maintenance_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "next_maintenance_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "image_url",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "manual_url",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "is_active",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "deleted_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "technical_location_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "description",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/Equipment"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister maintenance/equipment",
        "tags": [
          "interventions"
        ],
        "x-avia-documented": true,
        "x-avia-module": "interventions"
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Equipment"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Equipment"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer maintenance/equipment",
        "tags": [
          "interventions"
        ],
        "x-avia-documented": true,
        "x-avia-module": "interventions"
      }
    },
    "/api/v1/maintenance/equipment/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer maintenance/equipment",
        "tags": [
          "interventions"
        ],
        "x-avia-documented": true,
        "x-avia-module": "interventions"
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Equipment"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire maintenance/equipment par id",
        "tags": [
          "interventions"
        ],
        "x-avia-documented": true,
        "x-avia-module": "interventions"
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Equipment"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Equipment"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier maintenance/equipment",
        "tags": [
          "interventions"
        ],
        "x-avia-documented": true,
        "x-avia-module": "interventions"
      }
    },
    "/api/v1/maintenance/interventions": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "equipment_name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "description",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "priority",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "scheduled_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "started_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "completed_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "duration_minutes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "cost",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "assigned_to",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "deleted_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "workstation_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "equipment_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "is_active",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "order_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "serial_number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "project_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "intervention_number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "title",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "category",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "assigned_technician_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "problem_description",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "planned_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "declaration_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "standard_duration_hours",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "priority_level",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "service_contract_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "solution_description",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "resolution_notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "labor_cost",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "parts_cost",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "downtime_hours",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "duration_hours",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "intervention_type_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/Interventions"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister maintenance/interventions",
        "tags": [
          "interventions"
        ],
        "x-avia-documented": true,
        "x-avia-module": "interventions"
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Interventions"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Interventions"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer maintenance/interventions",
        "tags": [
          "interventions"
        ],
        "x-avia-documented": true,
        "x-avia-module": "interventions"
      }
    },
    "/api/v1/maintenance/interventions/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer maintenance/interventions",
        "tags": [
          "interventions"
        ],
        "x-avia-documented": true,
        "x-avia-module": "interventions"
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Interventions"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire maintenance/interventions par id",
        "tags": [
          "interventions"
        ],
        "x-avia-documented": true,
        "x-avia-module": "interventions"
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Interventions"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Interventions"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier maintenance/interventions",
        "tags": [
          "interventions"
        ],
        "x-avia-documented": true,
        "x-avia-module": "interventions"
      }
    },
    "/api/v1/maintenance/kpi/dashboard": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/maintenance/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/maintenance/kpi/mtbf/{equipmentId}": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/maintenance/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/maintenance/kpi/mttr/{equipmentId}": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/maintenance/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/maintenance/spare-parts": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "article_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "equipment_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "min_stock",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "current_stock",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "location",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "code",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "reference",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "description",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "category",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "stock_quantity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "min_quantity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "unit_price",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "location_code",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "supplier_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/SpareParts"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister maintenance/spare-parts",
        "tags": [
          "interventions"
        ],
        "x-avia-documented": true,
        "x-avia-module": "interventions"
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SpareParts"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SpareParts"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer maintenance/spare-parts",
        "tags": [
          "interventions"
        ],
        "x-avia-documented": true,
        "x-avia-module": "interventions"
      }
    },
    "/api/v1/maintenance/spare-parts/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer maintenance/spare-parts",
        "tags": [
          "interventions"
        ],
        "x-avia-documented": true,
        "x-avia-module": "interventions"
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SpareParts"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire maintenance/spare-parts par id",
        "tags": [
          "interventions"
        ],
        "x-avia-documented": true,
        "x-avia-module": "interventions"
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SpareParts"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SpareParts"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier maintenance/spare-parts",
        "tags": [
          "interventions"
        ],
        "x-avia-documented": true,
        "x-avia-module": "interventions"
      }
    },
    "/api/v1/maintenance/upcoming": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/maintenance/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/maintenance/{id}": {
      "delete": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/maintenance/interfaces/http/handler.go",
        "x-avia-documented": false
      },
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/maintenance/interfaces/http/handler.go",
        "x-avia-documented": false
      },
      "put": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/maintenance/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/maintenance/{id}/complete": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/maintenance/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/maintenance/{id}/start": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/maintenance/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/manufacturing-dashboard": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "order_number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "product_name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quantity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quantity_produced",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "order_status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "priority",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "planned_start_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "planned_end_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "actual_start_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "actual_end_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "client_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "client_name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "affair_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "responsable_name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "total_operations",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "completed_operations",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "active_operations",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "pending_operations",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "completion_percentage",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "total_estimated_duration",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "total_actual_duration",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "time_variance",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "estimated_cost",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "actual_cost",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "material_cost",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "labor_cost",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/ManufacturingDashboard"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister manufacturing-dashboard",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ManufacturingDashboard"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ManufacturingDashboard"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer manufacturing-dashboard",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/manufacturing-dashboard/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer manufacturing-dashboard",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ManufacturingDashboard"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire manufacturing-dashboard par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ManufacturingDashboard"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ManufacturingDashboard"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier manufacturing-dashboard",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/manufacturing-flows": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "description",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "steps",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "active",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "product_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "is_template",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "source_flow_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/ManufacturingFlows"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister manufacturing-flows",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ManufacturingFlows"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ManufacturingFlows"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer manufacturing-flows",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/manufacturing-flows/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer manufacturing-flows",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ManufacturingFlows"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire manufacturing-flows par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ManufacturingFlows"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ManufacturingFlows"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier manufacturing-flows",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/manufacturing-flows/{id}/assembly-guide": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/production/interfaces/http/flow_handler.go",
        "x-avia-documented": false
      },
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/production/interfaces/http/flow_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/manufacturing-flows/{id}/create-of": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/production/interfaces/http/flow_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/manufacturing-flows/{id}/duplicate": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/production/interfaces/http/flow_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/manufacturing-flows/{id}/simulate-of": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/production/interfaces/http/flow_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/manufacturing-flows/{id}/simulation/{moId}/advance": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/production/interfaces/http/flow_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/manufacturing-flows/{id}/simulations": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/production/interfaces/http/flow_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/manufacturing-operations": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "manufacturing_order_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "workstation_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "sequence",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "estimated_duration",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "actual_duration",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "started_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "completed_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "operator_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "operation_name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quantity_produced",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quantity_rejected",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quantity_good",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quantity_scrap",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quantity_rework",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "first_pass_yield",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "scrap_cost",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "rework_cost",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "description",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quality_check",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "paused_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "pause_duration",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "pause_count",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "parent_operation_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "operation_kind",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "rework_reason",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "rework_qty",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "planned_duration",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "mo_line_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/ManufacturingOperations"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister manufacturing-operations",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ManufacturingOperations"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ManufacturingOperations"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer manufacturing-operations",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/manufacturing-operations/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer manufacturing-operations",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ManufacturingOperations"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire manufacturing-operations par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ManufacturingOperations"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ManufacturingOperations"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier manufacturing-operations",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/manufacturing-operations/{id}/operator": {
      "put": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/production/interfaces/http/manufacturing_operations_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/manufacturing-order-lines": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "manufacturing_order_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "line_no",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "line_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "article_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "bom_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "designation",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quantity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "produced_quantity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "scrap_quantity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "unit",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "planned_start",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "planned_end",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "cost_estimate",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "actual_cost",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "stock_completed_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "stock_completed_qty",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim1_value_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim2_value_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim_set",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/ManufacturingOrderLines"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister manufacturing-order-lines",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ManufacturingOrderLines"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ManufacturingOrderLines"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer manufacturing-order-lines",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/manufacturing-order-lines/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer manufacturing-order-lines",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ManufacturingOrderLines"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire manufacturing-order-lines par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ManufacturingOrderLines"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ManufacturingOrderLines"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier manufacturing-order-lines",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/manufacturing-orders": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "article_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quantity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "produced_quantity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "planned_start",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "planned_end",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "actual_start",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "actual_end",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "priority",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "deleted_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "order_number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "product_name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "planned_quantity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "start_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "end_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "is_active",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "cost_estimate",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "actual_cost",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "scrap_quantity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "rework_quantity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "standard_cost",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "material_variance",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "labor_variance",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "total_variance",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "non_quality_cost",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "designation",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "bom_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "client_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "delivery_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "affair_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "flow_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "is_simulation",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "flow_data",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "chantier_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "purchase_order_number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "unit_cost",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "progress",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim1_value_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim2_value_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim_set",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "warehouse_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/ManufacturingOrders"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister manufacturing-orders",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ManufacturingOrders"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ManufacturingOrders"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer manufacturing-orders",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/manufacturing-orders/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer manufacturing-orders",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ManufacturingOrders"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire manufacturing-orders par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ManufacturingOrders"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ManufacturingOrders"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier manufacturing-orders",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/marketplace/packs": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "cmd/business-service/main.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/marketplace/packs/{code}": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "cmd/business-service/main.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/measurement-instruments": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "code",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "manufacturer",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "serial_number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "location",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "range_min",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "range_max",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "resolution",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "unit",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "last_calibration_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "next_calibration_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "calibration_frequency_days",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "responsible",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "certificate_url",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "is_active",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/MeasurementInstruments"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister measurement-instruments",
        "tags": [
          "quality"
        ],
        "x-avia-documented": true,
        "x-avia-module": "quality"
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MeasurementInstruments"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MeasurementInstruments"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer measurement-instruments",
        "tags": [
          "quality"
        ],
        "x-avia-documented": true,
        "x-avia-module": "quality"
      }
    },
    "/api/v1/measurement-instruments/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer measurement-instruments",
        "tags": [
          "quality"
        ],
        "x-avia-documented": true,
        "x-avia-module": "quality"
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MeasurementInstruments"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire measurement-instruments par id",
        "tags": [
          "quality"
        ],
        "x-avia-documented": true,
        "x-avia-module": "quality"
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MeasurementInstruments"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MeasurementInstruments"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier measurement-instruments",
        "tags": [
          "quality"
        ],
        "x-avia-documented": true,
        "x-avia-module": "quality"
      }
    },
    "/api/v1/mo-serial-operation-scans": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "serial_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "manufacturing_order_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "manufacturing_operation_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "operation_sequence",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "scan_result",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "operator_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "workstation_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "scanned_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/MoSerialOperationScans"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister mo-serial-operation-scans",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MoSerialOperationScans"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MoSerialOperationScans"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer mo-serial-operation-scans",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/mo-serial-operation-scans/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer mo-serial-operation-scans",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MoSerialOperationScans"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire mo-serial-operation-scans par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MoSerialOperationScans"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MoSerialOperationScans"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier mo-serial-operation-scans",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/mrp-exceptions": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "mrp_run_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "suggestion_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "article_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "article_code",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "article_name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "code",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "severity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "message",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "related_document_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "related_document_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "related_document_number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "existing_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "proposed_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "variance_days",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "variance_qty",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/MrpExceptions"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister mrp-exceptions",
        "tags": [
          "planning"
        ],
        "x-avia-documented": true,
        "x-avia-module": "planning"
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MrpExceptions"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MrpExceptions"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer mrp-exceptions",
        "tags": [
          "planning"
        ],
        "x-avia-documented": true,
        "x-avia-module": "planning"
      }
    },
    "/api/v1/mrp-exceptions/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer mrp-exceptions",
        "tags": [
          "planning"
        ],
        "x-avia-documented": true,
        "x-avia-module": "planning"
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MrpExceptions"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire mrp-exceptions par id",
        "tags": [
          "planning"
        ],
        "x-avia-documented": true,
        "x-avia-module": "planning"
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MrpExceptions"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MrpExceptions"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier mrp-exceptions",
        "tags": [
          "planning"
        ],
        "x-avia-documented": true,
        "x-avia-module": "planning"
      }
    },
    "/api/v1/mrp-planned-orders": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "article_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "order_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "required_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quantity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "source",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "manufacturing_order_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "purchase_request_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "parent_order_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "level",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/MrpPlannedOrders"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister mrp-planned-orders",
        "tags": [
          "planning"
        ],
        "x-avia-documented": true,
        "x-avia-module": "planning"
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MrpPlannedOrders"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MrpPlannedOrders"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer mrp-planned-orders",
        "tags": [
          "planning"
        ],
        "x-avia-documented": true,
        "x-avia-module": "planning"
      }
    },
    "/api/v1/mrp-planned-orders/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer mrp-planned-orders",
        "tags": [
          "planning"
        ],
        "x-avia-documented": true,
        "x-avia-module": "planning"
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MrpPlannedOrders"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire mrp-planned-orders par id",
        "tags": [
          "planning"
        ],
        "x-avia-documented": true,
        "x-avia-module": "planning"
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MrpPlannedOrders"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MrpPlannedOrders"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier mrp-planned-orders",
        "tags": [
          "planning"
        ],
        "x-avia-documented": true,
        "x-avia-module": "planning"
      }
    },
    "/api/v1/mrp-runs": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "run_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "parameters",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "completed_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "run_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "articles_processed",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "suggestions_created",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "horizon_days",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "demand_sources",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/MrpRuns"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister mrp-runs",
        "tags": [
          "planning"
        ],
        "x-avia-documented": true,
        "x-avia-module": "planning"
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MrpRuns"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MrpRuns"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer mrp-runs",
        "tags": [
          "planning"
        ],
        "x-avia-documented": true,
        "x-avia-module": "planning"
      }
    },
    "/api/v1/mrp-runs/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer mrp-runs",
        "tags": [
          "planning"
        ],
        "x-avia-documented": true,
        "x-avia-module": "planning"
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MrpRuns"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire mrp-runs par id",
        "tags": [
          "planning"
        ],
        "x-avia-documented": true,
        "x-avia-module": "planning"
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MrpRuns"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MrpRuns"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier mrp-runs",
        "tags": [
          "planning"
        ],
        "x-avia-documented": true,
        "x-avia-module": "planning"
      }
    },
    "/api/v1/mrp-suggestions": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "mrp_run_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "article_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "suggestion_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quantity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "due_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "priority",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "accepted",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "article_code",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "article_name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "gross_requirement",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "net_requirement",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "stock_on_hand",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "safety_stock",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "suggested_qty",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "order_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "required_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "converted_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "qty_on_order",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "supplier_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "supplier_name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "lead_time_days",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "source_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "source_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "level",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "exception_code",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "lead_time_source",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/MrpSuggestions"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister mrp-suggestions",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MrpSuggestions"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MrpSuggestions"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer mrp-suggestions",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/mrp-suggestions/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer mrp-suggestions",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MrpSuggestions"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire mrp-suggestions par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MrpSuggestions"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MrpSuggestions"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier mrp-suggestions",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/non-conformities": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "severity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "title",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "description",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "root_cause",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "corrective_action",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "preventive_action",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "article_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "detected_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "responsible",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "closed_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "closed_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "due_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "deleted_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "manufacturing_order_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "reception_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "incoming_inspection_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "source_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "workflow_step",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "source",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "assigned_to",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "cost_impact",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "affected_quantity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "affected_product",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "immediate_action",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "customer_impact",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/NonConformities"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister non-conformities",
        "tags": [
          "quality"
        ],
        "x-avia-documented": true,
        "x-avia-module": "quality"
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NonConformities"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NonConformities"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer non-conformities",
        "tags": [
          "quality"
        ],
        "x-avia-documented": true,
        "x-avia-module": "quality"
      }
    },
    "/api/v1/non-conformities/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer non-conformities",
        "tags": [
          "quality"
        ],
        "x-avia-documented": true,
        "x-avia-module": "quality"
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NonConformities"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire non-conformities par id",
        "tags": [
          "quality"
        ],
        "x-avia-documented": true,
        "x-avia-module": "quality"
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NonConformities"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NonConformities"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier non-conformities",
        "tags": [
          "quality"
        ],
        "x-avia-documented": true,
        "x-avia-module": "quality"
      }
    },
    "/api/v1/notification-logs": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "user_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "title",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "body",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "channel",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "event_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "entity_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "entity_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "read",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "sent_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/NotificationLogs"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister notification-logs",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NotificationLogs"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotificationLogs"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer notification-logs",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/notification-logs/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer notification-logs",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotificationLogs"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire notification-logs par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NotificationLogs"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotificationLogs"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier notification-logs",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/notification-settings": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "user_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "channel",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "event_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "enabled",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "email",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/NotificationSettings"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister notification-settings",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NotificationSettings"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotificationSettings"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer notification-settings",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/notification-settings/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer notification-settings",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotificationSettings"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire notification-settings par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NotificationSettings"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotificationSettings"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier notification-settings",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/notifications": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/notification/interfaces/http/handler.go",
        "x-avia-documented": false
      },
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/notification/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/notifications/digest/run": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/notification/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/notifications/read-all": {
      "put": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/notification/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/notifications/suggest-actions": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/notification/interfaces/http/handler.go",
        "x-avia-documented": false
      },
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/notification/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/notifications/unread": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/notification/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/notifications/{id}/read": {
      "put": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/notification/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/numbering/mask/preview": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/numbering/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/numbering/next": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/numbering/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/numbering/preview": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/numbering/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/numbering/series": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/numbering/interfaces/http/handler.go",
        "x-avia-documented": false
      },
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/numbering/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/numbering/series/{id}": {
      "delete": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/numbering/interfaces/http/handler.go",
        "x-avia-documented": false
      },
      "put": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/numbering/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/numbering/series/{id}/allocate-manual": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/numbering/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/of-generation-history": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "source_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "source_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "manufacturing_order_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "generated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "generated_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "metadata",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/OfGenerationHistory"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister of-generation-history",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/OfGenerationHistory"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OfGenerationHistory"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer of-generation-history",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/of-generation-history/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer of-generation-history",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OfGenerationHistory"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire of-generation-history par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/OfGenerationHistory"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OfGenerationHistory"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier of-generation-history",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/openapi.json": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "cmd/business-service/main.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/operation-confirmations": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "manufacturing_order_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "operation_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quantity_good",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quantity_scrap",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quantity_rework",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "scrap_reason",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "rework_reason",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "confirmed_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "confirmed_by_name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "confirmed_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "labor_hours",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "machine_hours",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "labor_cost",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "material_cost",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "overhead_cost",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "cancelled_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "cancelled_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "cancelled_by_name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "cancellation_reason",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "operator_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "operator_name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/OperationConfirmations"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister operation-confirmations",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/OperationConfirmations"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OperationConfirmations"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer operation-confirmations",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/operation-confirmations/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer operation-confirmations",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OperationConfirmations"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire operation-confirmations par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/OperationConfirmations"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OperationConfirmations"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier operation-confirmations",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/operation-confirmations/{id}/cancel": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/production/interfaces/http/confirmation_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/opportunities": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "client_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "stage",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "probability",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "expected_revenue",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "expected_close_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "assigned_to",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "lost_reason",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "deleted_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "opportunity_number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "title",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "amount",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "source",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "expected_close",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "description",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "contact_person",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "sales_person",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "segment",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "channel",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "priority",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "specifications",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "required_volume",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quality_requirements",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "delivery_constraints",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "estimated_budget",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "linked_product_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/Opportunities"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister opportunities",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Opportunities"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Opportunities"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer opportunities",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/opportunities/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer opportunities",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Opportunities"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire opportunities par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Opportunities"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Opportunities"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier opportunities",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/opportunities/{id}/status": {
      "patch": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "cmd/business-service/main.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/payment-schedules": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "invoice_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "due_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "amount",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "paid_amount",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "payment_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "payment_method",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "reference",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "delivery_note_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "client_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "supplier_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "purchase_order_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/PaymentSchedules"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister payment-schedules",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PaymentSchedules"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaymentSchedules"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer payment-schedules",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/payment-schedules/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer payment-schedules",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaymentSchedules"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire payment-schedules par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PaymentSchedules"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaymentSchedules"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier payment-schedules",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/payment-terms": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "days",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "discount_percent",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "discount_days",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "description",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "active",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "code",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "end_of_month",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "is_default",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/PaymentTerms"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister payment-terms",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PaymentTerms"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaymentTerms"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer payment-terms",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/payment-terms/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer payment-terms",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaymentTerms"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire payment-terms par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PaymentTerms"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaymentTerms"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier payment-terms",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/payments": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "schedule_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "invoice_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "purchase_order_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "amount",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "payment_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "payment_method",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "reference",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "bank_name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/Payments"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister payments",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Payments"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Payments"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer payments",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/payments/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer payments",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Payments"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire payments par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Payments"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Payments"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier payments",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/payroll-entries": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "employee_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "period",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "gross_salary",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "net_salary",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "deductions",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "bonuses",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "paid_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "month",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "year",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/PayrollEntries"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister payroll-entries",
        "tags": [
          "hr"
        ],
        "x-avia-documented": true,
        "x-avia-module": "hr"
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PayrollEntries"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayrollEntries"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer payroll-entries",
        "tags": [
          "hr"
        ],
        "x-avia-documented": true,
        "x-avia-module": "hr"
      }
    },
    "/api/v1/payroll-entries/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer payroll-entries",
        "tags": [
          "hr"
        ],
        "x-avia-documented": true,
        "x-avia-module": "hr"
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayrollEntries"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire payroll-entries par id",
        "tags": [
          "hr"
        ],
        "x-avia-documented": true,
        "x-avia-module": "hr"
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PayrollEntries"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayrollEntries"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier payroll-entries",
        "tags": [
          "hr"
        ],
        "x-avia-documented": true,
        "x-avia-module": "hr"
      }
    },
    "/api/v1/payroll-runs": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "period",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "total_gross",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "total_net",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "total_employer_charges",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "employee_count",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "validated_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "validated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "paid_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/PayrollRuns"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister payroll-runs",
        "tags": [
          "hr"
        ],
        "x-avia-documented": true,
        "x-avia-module": "hr"
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PayrollRuns"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayrollRuns"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer payroll-runs",
        "tags": [
          "hr"
        ],
        "x-avia-documented": true,
        "x-avia-module": "hr"
      }
    },
    "/api/v1/payroll-runs/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer payroll-runs",
        "tags": [
          "hr"
        ],
        "x-avia-documented": true,
        "x-avia-module": "hr"
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayrollRuns"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire payroll-runs par id",
        "tags": [
          "hr"
        ],
        "x-avia-documented": true,
        "x-avia-module": "hr"
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PayrollRuns"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayrollRuns"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier payroll-runs",
        "tags": [
          "hr"
        ],
        "x-avia-documented": true,
        "x-avia-module": "hr"
      }
    },
    "/api/v1/payroll-slips": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "payroll_run_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "employee_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "period",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "base_salary",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "worked_days",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "worked_hours",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "overtime_hours",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "overtime_amount",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "bonuses",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "bonus_details",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "deductions",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "deduction_details",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "gross_salary",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "cnss_employee",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "irpp",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "css",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "cnss_employer",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "tfp",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "foprolos",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "accident_travail",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "net_salary",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "total_employer_cost",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/PayrollSlips"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister payroll-slips",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PayrollSlips"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayrollSlips"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer payroll-slips",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/payroll-slips/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer payroll-slips",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayrollSlips"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire payroll-slips par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PayrollSlips"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayrollSlips"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier payroll-slips",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/payroll/baremes": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/hr/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/payroll/calculate": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/hr/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/payroll/employees/{id}/history": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/hr/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/payroll/runs": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/hr/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/payroll/runs/{id}": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/hr/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/payroll/runs/{id}/slips": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/hr/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/payroll/runs/{id}/validate": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/hr/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/planning-forecasts": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "article_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "period",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "forecast_qty",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "planned_qty",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "actual_qty",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/PlanningForecasts"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister planning-forecasts",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PlanningForecasts"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlanningForecasts"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer planning-forecasts",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/planning-forecasts/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer planning-forecasts",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlanningForecasts"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire planning-forecasts par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PlanningForecasts"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlanningForecasts"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier planning-forecasts",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/portal/auth": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/client/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/portal/company": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/client/interfaces/http/portal_quotes.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/portal/delivery-notes": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/client/interfaces/http/portal_tracking.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/portal/invoices": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/client/interfaces/http/portal_invoices.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/portal/invoices/{id}": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/client/interfaces/http/portal_invoices.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/portal/invoices/{id}/payment-reference": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/client/interfaces/http/portal_invoices.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/portal/manufacturing-operations": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/client/interfaces/http/portal_tracking.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/portal/manufacturing-orders": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/client/interfaces/http/portal_tracking.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/portal/quote-requests": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/client/interfaces/http/portal_quotes.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/portal/quotes": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/client/interfaces/http/portal_quotes.go",
        "x-avia-documented": false
      },
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/client/interfaces/http/portal_quotes.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/portal/quotes/{id}": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/client/interfaces/http/portal_quotes.go",
        "x-avia-documented": false
      },
      "put": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/client/interfaces/http/portal_quotes.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/preventive-plans": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/maintenance/interfaces/http/handler.go",
        "x-avia-documented": false
      },
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/maintenance/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/preventive-plans/{id}": {
      "delete": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/maintenance/interfaces/http/handler.go",
        "x-avia-documented": false
      },
      "put": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/maintenance/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/pricing-conditions": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "scope",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "scope_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "value_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "value",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "min_quantity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "max_quantity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "valid_from",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "valid_to",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "priority",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "is_active",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/PricingConditions"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister pricing-conditions",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PricingConditions"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PricingConditions"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer pricing-conditions",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/pricing-conditions/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer pricing-conditions",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PricingConditions"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire pricing-conditions par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PricingConditions"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PricingConditions"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier pricing-conditions",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/procurement/amendment-history/{rootDaId}": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/procurement/interfaces/http/procurement_po_amendments.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/procurement/amendment-rules": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/procurement/interfaces/http/procurement_amendments.go",
        "x-avia-documented": false
      },
      "put": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/procurement/interfaces/http/procurement_amendments.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/procurement/auto-da-suggestions": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/procurement/interfaces/http/procurement_ops.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/procurement/dashboard": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/procurement/interfaces/http/procurement_extended.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/procurement/document-tree/{entityType}/{entityId}": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/procurement/interfaces/http/procurement_amendments.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/procurement/gr-ir-clearing": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/procurement/interfaces/http/procurement_extended.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/procurement/gr-ir-clearing/{poId}/clear": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/procurement/interfaces/http/procurement_extended.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/procurement/reconciliation-mode": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/procurement/interfaces/http/procurement_extended.go",
        "x-avia-documented": false
      },
      "put": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/procurement/interfaces/http/procurement_extended.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/procurement/sla-alerts": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/procurement/interfaces/http/procurement_ops.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/procurement/supplier-returns": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/procurement/interfaces/http/procurement_po_amendments.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/procurement/three-way-match/{poId}": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/procurement/interfaces/http/procurement_extended.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/procurement/three-way-match/{poId}/validate": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/procurement/interfaces/http/procurement_extended.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/production-alerts": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "alert_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "reference",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "message",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "severity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/ProductionAlerts"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister production-alerts",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/production-alerts/{id}": {
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProductionAlerts"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire production-alerts par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/production-confirmations": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "manufacturing_order_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "operation_name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "workstation_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quantity_good",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quantity_scrap",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quantity_rework",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "labor_hours",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "machine_hours",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "labor_cost",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "material_cost",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "confirmed_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "confirmed_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/ProductionConfirmations"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister production-confirmations",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProductionConfirmations"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProductionConfirmations"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer production-confirmations",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/production-confirmations/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer production-confirmations",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProductionConfirmations"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire production-confirmations par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProductionConfirmations"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProductionConfirmations"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier production-confirmations",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/production-dashboard-summary": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "active_orders_count",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "active_operations_count",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "paused_operations_count",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "pending_operations_count",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "completed_today_count",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "avg_duration_today",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "total_duration_today",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "operations_delayed_count",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "avg_variance_today",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quality_checks_today",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "active_workstations_count",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "active_employees_count",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "today_oee",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/ProductionDashboardSummary"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister production-dashboard-summary",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/production-dashboard-summary/{id}": {
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProductionDashboardSummary"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire production-dashboard-summary par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/production-metrics": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "workstation_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "manufacturing_order_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "planned_quantity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "produced_quantity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "defect_quantity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "cycle_time",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "setup_time",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "downtime_minutes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "oee_availability",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "oee_performance",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "oee_quality",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "oee_overall",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/ProductionMetrics"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister production-metrics",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProductionMetrics"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProductionMetrics"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer production-metrics",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/production-metrics/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer production-metrics",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProductionMetrics"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire production-metrics par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProductionMetrics"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProductionMetrics"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier production-metrics",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/production-orders": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "article_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quantity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "produced_quantity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "planned_start",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "planned_end",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "actual_start",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "actual_end",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "priority",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "deleted_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "order_number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "product_name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "planned_quantity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "start_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "end_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "is_active",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "cost_estimate",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "actual_cost",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "scrap_quantity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "rework_quantity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "standard_cost",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "material_variance",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "labor_variance",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "total_variance",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "non_quality_cost",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "designation",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "bom_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "client_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "delivery_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "affair_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "flow_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "is_simulation",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "flow_data",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "chantier_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "purchase_order_number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "unit_cost",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "progress",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim1_value_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim2_value_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim_set",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "warehouse_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/ManufacturingOrders"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister production-orders",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ManufacturingOrders"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ManufacturingOrders"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer production-orders",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/production-orders/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer production-orders",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ManufacturingOrders"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire production-orders par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ManufacturingOrders"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ManufacturingOrders"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier production-orders",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/production-release-pv-signatures": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "pv_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "role",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "signer_name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "signer_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "signed_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "signature_data",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "comments",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/ProductionReleasePvSignatures"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister production-release-pv-signatures",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProductionReleasePvSignatures"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProductionReleasePvSignatures"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer production-release-pv-signatures",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/production-release-pv-signatures/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer production-release-pv-signatures",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProductionReleasePvSignatures"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire production-release-pv-signatures par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProductionReleasePvSignatures"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProductionReleasePvSignatures"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier production-release-pv-signatures",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/production-release-pvs": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "pv_number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "affair_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "manufacturing_order_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "chantier_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "meeting_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "technical_sheet",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "procurement_plan",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "operation_sequence",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "scanned_document_url",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "observations_be",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "observations_production",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "observations_achats",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "approved_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "approved_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "deleted_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/ProductionReleasePvs"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister production-release-pvs",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProductionReleasePvs"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProductionReleasePvs"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer production-release-pvs",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/production-release-pvs/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer production-release-pvs",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProductionReleasePvs"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire production-release-pvs par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProductionReleasePvs"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProductionReleasePvs"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier production-release-pvs",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/production-release-pvs/{id}/approve": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/affairworkflow/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/production-release-pvs/{id}/scan": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/affairworkflow/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/production-release-pvs/{id}/sign": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/affairworkflow/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/production-release-pvs/{id}/status": {
      "patch": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/affairworkflow/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/production-release-pvs/{id}/suggest-operations": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/affairworkflow/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/production-rework-orders": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "reference",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "manufacturing_order_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "source_operation_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "target_operation_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "source_operation_name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "target_operation_name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quantity_to_rework",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quantity_reworked",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quantity_scrapped",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "reason",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "defect_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "nc_reference",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "priority",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "cost_impact",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "assigned_to",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "assigned_to_name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "started_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "completed_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/ProductionReworkOrders"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister production-rework-orders",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProductionReworkOrders"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProductionReworkOrders"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer production-rework-orders",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/production-rework-orders/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer production-rework-orders",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProductionReworkOrders"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire production-rework-orders par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProductionReworkOrders"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProductionReworkOrders"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier production-rework-orders",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/production/bom": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "article_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "version",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "deleted_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "yield_rate",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "is_active",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/BillOfMaterials"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister production/bom",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BillOfMaterials"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BillOfMaterials"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer production/bom",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/production/bom-items": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "bom_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "article_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quantity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "unit",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "position",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "unit_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "wastage_rate",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "is_critical",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "substitute_article_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "child_bom_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/BomItems"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister production/bom-items",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BomItems"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BomItems"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer production/bom-items",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/production/bom-items/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer production/bom-items",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BomItems"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire production/bom-items par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BomItems"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BomItems"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier production/bom-items",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/production/bom-lines": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "bom_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "component_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quantity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "unit",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "scrap_rate",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "article_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/BomLines"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister production/bom-lines",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BomLines"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BomLines"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer production/bom-lines",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/production/bom-lines/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer production/bom-lines",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BomLines"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire production/bom-lines par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BomLines"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BomLines"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier production/bom-lines",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/production/bom/items/{id}": {
      "delete": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/production/interfaces/http/bom_handler.go",
        "x-avia-documented": false
      },
      "put": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/production/interfaces/http/bom_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/production/bom/lines": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "bom_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "component_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quantity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "unit",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "scrap_rate",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "article_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/BomLines"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister production/bom/lines",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BomLines"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BomLines"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer production/bom/lines",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/production/bom/lines/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer production/bom/lines",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BomLines"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire production/bom/lines par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BomLines"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BomLines"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier production/bom/lines",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/production/bom/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer production/bom",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BillOfMaterials"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire production/bom par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BillOfMaterials"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BillOfMaterials"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier production/bom",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/production/bom/{id}/explode": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/production/interfaces/http/bom_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/production/bom/{id}/import": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/production/interfaces/http/bom_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/production/bom/{id}/items": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/production/interfaces/http/bom_handler.go",
        "x-avia-documented": false
      },
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/production/interfaces/http/bom_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/production/bom/{id}/tree": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/production/interfaces/http/bom_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/production/capacity/load": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/production/interfaces/http/routing_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/production/guides": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "article_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "version",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "flow_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "title",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "description",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "product_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/AssemblyGuides"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister production/guides",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AssemblyGuides"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssemblyGuides"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer production/guides",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/production/guides/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer production/guides",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssemblyGuides"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire production/guides par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AssemblyGuides"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssemblyGuides"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier production/guides",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/production/mrp/create-purchase-requests": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/production/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/production/mrp/run": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/production/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/production/mrp/sop-summary": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/production/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/production/mrp/suggestions": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/production/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/production/mrp/suggestions/{id}/approve": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/production/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/production/mrp/suggestions/{id}/convert": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/production/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/production/mrp/suggestions/{id}/dismiss": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/production/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/production/oee": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "workstation_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "record_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "availability",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "performance",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quality_rate",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "oee",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "planned_production_time",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "actual_production_time",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "total_pieces",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "good_pieces",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "oee_overall",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "recorded_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "deleted_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "workstation_name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/OeeRecords"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister production/oee",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/OeeRecords"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OeeRecords"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer production/oee",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/production/oee/summary": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/production/interfaces/http/oee_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/production/oee/sync-from-operations": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/production/interfaces/http/oee_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/production/oee/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer production/oee",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OeeRecords"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire production/oee par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/OeeRecords"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OeeRecords"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier production/oee",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/production/orders": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "article_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quantity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "produced_quantity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "planned_start",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "planned_end",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "actual_start",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "actual_end",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "priority",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "deleted_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "order_number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "product_name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "planned_quantity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "start_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "end_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "is_active",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "cost_estimate",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "actual_cost",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "scrap_quantity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "rework_quantity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "standard_cost",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "material_variance",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "labor_variance",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "total_variance",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "non_quality_cost",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "designation",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "bom_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "client_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "delivery_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "affair_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "flow_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "is_simulation",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "flow_data",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "chantier_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "purchase_order_number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "unit_cost",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "progress",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim1_value_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim2_value_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim_set",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "warehouse_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/ManufacturingOrders"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister production/orders",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ManufacturingOrders"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ManufacturingOrders"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer production/orders",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/production/orders/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer production/orders",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ManufacturingOrders"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire production/orders par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ManufacturingOrders"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ManufacturingOrders"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier production/orders",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/production/orders/{id}/complete": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/production/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/production/orders/{id}/cost-breakdown": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/production/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/production/orders/{id}/documents-requis": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/production/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/production/orders/{id}/produce": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/production/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/production/orders/{id}/refresh-cost": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/production/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/production/orders/{id}/routing": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/production/interfaces/http/routing_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/production/orders/{id}/start": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/production/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/production/orders/{id}/status": {
      "patch": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/production/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/production/orders/{id}/stock-completion": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/production/interfaces/http/stock_completion_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/production/productivity-stats": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/production/interfaces/http/productivity_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/production/rework-orders": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "reference",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "manufacturing_order_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "source_operation_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "target_operation_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "source_operation_name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "target_operation_name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quantity_to_rework",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quantity_reworked",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quantity_scrapped",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "reason",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "defect_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "nc_reference",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "priority",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "cost_impact",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "assigned_to",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "assigned_to_name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "started_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "completed_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/ProductionReworkOrders"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister production/rework-orders",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProductionReworkOrders"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProductionReworkOrders"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer production/rework-orders",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/production/rework-orders/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer production/rework-orders",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProductionReworkOrders"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire production/rework-orders par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProductionReworkOrders"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProductionReworkOrders"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier production/rework-orders",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/production/routing": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/production/interfaces/http/routing_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/production/routing/{id}": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/production/interfaces/http/routing_handler.go",
        "x-avia-documented": false
      },
      "put": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/production/interfaces/http/routing_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/production/routing/{id}/complete": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/production/interfaces/http/routing_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/production/routing/{id}/start": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/production/interfaces/http/routing_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/production/settings": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/production/interfaces/http/production_policy.go",
        "x-avia-documented": false
      },
      "put": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/production/interfaces/http/production_policy.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/production/size-color-matrices": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "reference",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "article_reference",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "sizes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "colors",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quantities",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "total_quantity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/SizeColorMatrices"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister production/size-color-matrices",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SizeColorMatrices"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SizeColorMatrices"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer production/size-color-matrices",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/production/size-color-matrices/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer production/size-color-matrices",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SizeColorMatrices"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire production/size-color-matrices par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SizeColorMatrices"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SizeColorMatrices"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier production/size-color-matrices",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/production/workstations": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "code",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "capacity_per_hour",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "hourly_cost",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "location",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "deleted_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "description",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/Workstations"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister production/workstations",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Workstations"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Workstations"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer production/workstations",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/production/workstations/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer production/workstations",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Workstations"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire production/workstations par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Workstations"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Workstations"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier production/workstations",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/profiles": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "user_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "display_name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "avatar_url",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "preferences",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "email",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "full_name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "phone",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "role",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "is_active",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "last_sign_in_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "company_name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "company_address",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "company_phone",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "company_email",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "tax_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "country",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "currency",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "department",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/Profiles"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister profiles",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Profiles"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Profiles"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer profiles",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/profiles/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer profiles",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Profiles"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire profiles par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Profiles"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Profiles"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier profiles",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/project-articles": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "project_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "article_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quantity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quantity_planned",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quantity_used",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "unit_price",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "phase_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/ProjectArticles"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister project-articles",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProjectArticles"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectArticles"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer project-articles",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/project-articles/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer project-articles",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectArticles"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire project-articles par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProjectArticles"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectArticles"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier project-articles",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/project-installations": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "project_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "location",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "installation_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/ProjectInstallations"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister project-installations",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProjectInstallations"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectInstallations"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer project-installations",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/project-installations/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer project-installations",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectInstallations"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire project-installations par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProjectInstallations"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectInstallations"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier project-installations",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/project-phases": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "project_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "start_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "end_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "progress",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "position",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "sequence",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "progress_percent",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/ProjectPhases"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister project-phases",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProjectPhases"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectPhases"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer project-phases",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/project-phases/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer project-phases",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectPhases"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire project-phases par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProjectPhases"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectPhases"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier project-phases",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/project-tools": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "project_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quantity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "category",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "serial_number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "assigned_to",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "date_assigned",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "date_returned",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/ProjectTools"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister project-tools",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProjectTools"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectTools"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer project-tools",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/project-tools/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer project-tools",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectTools"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire project-tools par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProjectTools"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectTools"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier project-tools",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/projects": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "client_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "reference",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "description",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "start_date_planned",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "end_date_planned",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "start_date_actual",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "end_date_actual",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "budget_estimated",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "budget_actual",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "progress_percent",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "chef_chantier_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "project_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "deleted_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/Projects"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister projects",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Projects"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Projects"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer projects",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/projects/tasks": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "phase_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "title",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "description",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "assigned_to",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "priority",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "due_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "estimated_hours",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "actual_hours",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "project_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "completed_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/ProjectTasks"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister projects/tasks",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProjectTasks"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectTasks"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer projects/tasks",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/projects/tasks/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer projects/tasks",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectTasks"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire projects/tasks par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProjectTasks"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectTasks"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier projects/tasks",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/projects/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer projects",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Projects"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire projects par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Projects"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Projects"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier projects",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/purchase-contract-items": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "contract_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "article_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quantity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "unit_price",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "total",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/PurchaseContractItems"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister purchase-contract-items",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PurchaseContractItems"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PurchaseContractItems"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer purchase-contract-items",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/purchase-contract-items/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer purchase-contract-items",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PurchaseContractItems"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire purchase-contract-items par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PurchaseContractItems"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PurchaseContractItems"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier purchase-contract-items",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/purchase-contracts": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "contract_number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "title",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "supplier_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "contract_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "start_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "end_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "total_value",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "consumed_value",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "payment_terms",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "min_order_value",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "max_order_value",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "auto_renew",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/PurchaseContracts"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister purchase-contracts",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PurchaseContracts"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PurchaseContracts"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer purchase-contracts",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/purchase-contracts/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer purchase-contracts",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PurchaseContracts"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire purchase-contracts par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PurchaseContracts"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PurchaseContracts"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier purchase-contracts",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/purchase-order-amendments/{id}": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/procurement/interfaces/http/procurement_po_amendments.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/purchase-order-amendments/{id}/apply": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/procurement/interfaces/http/procurement_po_amendments.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/purchase-order-amendments/{id}/approve": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/procurement/interfaces/http/procurement_po_amendments.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/purchase-order-amendments/{id}/submit": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/procurement/interfaces/http/procurement_po_amendments.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/purchase-order-items": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "purchase_order_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "article_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "description",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quantity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "received_quantity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "unit_price",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "tax_rate",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "total",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "position",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quantity_original",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quantity_rejected",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quantity_cancelled",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "delivery_completed",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "source_da_item_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "discount_rate",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "discount_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "fodec_rate",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim1_value_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim2_value_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim_set",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/PurchaseOrderItems"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister purchase-order-items",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PurchaseOrderItems"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PurchaseOrderItems"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer purchase-order-items",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/purchase-order-items/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer purchase-order-items",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PurchaseOrderItems"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire purchase-order-items par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PurchaseOrderItems"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PurchaseOrderItems"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier purchase-order-items",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/purchase-orders": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "supplier_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "expected_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "subtotal",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "tax_amount",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "total",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "approved_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "deleted_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "expected_delivery_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "actual_delivery_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "delivery_status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "supplier_reference",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "affair_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "archived_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "archived_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "supplier_rfq_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "matched_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "matched_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "gr_ir_cleared_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "gr_ir_cleared_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "purchase_request_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "budget_code",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "cost_center",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "cost_center_local",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "destination_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "purchase_contract_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "supplier_order_ref",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim1_value_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim2_value_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim_set",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "warehouse_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/PurchaseOrders"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister purchase-orders",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PurchaseOrders"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PurchaseOrders"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer purchase-orders",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/purchase-orders/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer purchase-orders",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PurchaseOrders"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire purchase-orders par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PurchaseOrders"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PurchaseOrders"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier purchase-orders",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/purchase-request-items": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "purchase_request_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "article_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "description",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quantity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "unit",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "estimated_unit_price",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "specifications",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "current_stock",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "position",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "tva_rate",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "supplier_discount",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "purchase_price",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "source_item_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quantity_original",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quantity_ordered",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quantity_received",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quantity_rejected",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quantity_cancelled",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim1_value_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim2_value_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim_set",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/PurchaseRequestItems"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister purchase-request-items",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PurchaseRequestItems"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PurchaseRequestItems"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer purchase-request-items",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/purchase-request-items/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer purchase-request-items",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PurchaseRequestItems"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire purchase-request-items par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PurchaseRequestItems"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PurchaseRequestItems"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier purchase-request-items",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/purchase-requests": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "request_number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "requester_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "department",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "project_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "title",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "description",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "priority",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "required_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "submitted_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "reviewed_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "reviewed_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "approved_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "approved_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "rejection_reason",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "rfq_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "purchase_order_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "deleted_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "chantier_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "budget_code",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "cost_center",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "affair_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "destination_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "cost_center_local",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "archived_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "archived_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "parent_request_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "root_request_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "request_kind",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "amendment_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "amendment_reason",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "source_reception_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "source_po_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "technical_study_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "project_ref_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "be_content_locked",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "manufacturing_order_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "supplier_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "mrp_run_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim1_value_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim2_value_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim_set",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "warehouse_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/PurchaseRequests"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister purchase-requests",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PurchaseRequests"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PurchaseRequests"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer purchase-requests",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/purchase-requests/budget-check": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/procurement/interfaces/http/procurement_extended.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/purchase-requests/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer purchase-requests",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PurchaseRequests"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire purchase-requests par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PurchaseRequests"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PurchaseRequests"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier purchase-requests",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/purchase-requests/{id}/attachments": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/procurement/interfaces/http/procurement_ops.go",
        "x-avia-documented": false
      },
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/procurement/interfaces/http/procurement_ops.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/purchase-requests/{id}/create-complement": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/procurement/interfaces/http/procurement_amendments.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/purchase-requests/{id}/create-rectification": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/procurement/interfaces/http/procurement_amendments.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/purchase-requests/{id}/generate-rfq": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/procurement/interfaces/http/procurement_extended.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/purchase-requests/{id}/items": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/procurement/interfaces/http/handler.go",
        "x-avia-documented": false
      },
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/procurement/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/purchase-requests/{id}/open-quantities": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/procurement/interfaces/http/procurement_amendments.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/purchase-requests/{id}/status": {
      "patch": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/procurement/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/purchases": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "supplier_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "expected_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "subtotal",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "tax_amount",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "total",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "approved_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "deleted_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "expected_delivery_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "actual_delivery_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "delivery_status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "supplier_reference",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "affair_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "archived_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "archived_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "supplier_rfq_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "matched_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "matched_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "gr_ir_cleared_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "gr_ir_cleared_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "purchase_request_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "budget_code",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "cost_center",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "cost_center_local",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "destination_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "purchase_contract_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "supplier_order_ref",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim1_value_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim2_value_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim_set",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "warehouse_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/PurchaseOrders"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister purchases",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PurchaseOrders"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PurchaseOrders"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer purchases",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/purchases/invoices": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "invoice_number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "supplier_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "purchase_order_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "invoice_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "due_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "subtotal",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "tax_total",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "total",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "global_discount",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "stamp_duty_included",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "affair_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "archived_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "archived_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim1_value_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim2_value_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim_set",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "warehouse_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/SupplierInvoices"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister purchases/invoices",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SupplierInvoices"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SupplierInvoices"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer purchases/invoices",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/purchases/invoices/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer purchases/invoices",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SupplierInvoices"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire purchases/invoices par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SupplierInvoices"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SupplierInvoices"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier purchases/invoices",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/purchases/orders": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "supplier_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "expected_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "subtotal",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "tax_amount",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "total",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "approved_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "deleted_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "expected_delivery_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "actual_delivery_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "delivery_status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "supplier_reference",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "affair_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "archived_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "archived_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "supplier_rfq_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "matched_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "matched_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "gr_ir_cleared_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "gr_ir_cleared_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "purchase_request_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "budget_code",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "cost_center",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "cost_center_local",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "destination_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "purchase_contract_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "supplier_order_ref",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim1_value_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim2_value_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim_set",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "warehouse_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/PurchaseOrders"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister purchases/orders",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PurchaseOrders"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PurchaseOrders"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer purchases/orders",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/purchases/orders/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer purchases/orders",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PurchaseOrders"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire purchases/orders par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PurchaseOrders"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PurchaseOrders"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier purchases/orders",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/purchases/payments": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "supplier_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "supplier_invoice_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "amount",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "payment_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "payment_method",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "reference",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/SupplierPayments"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister purchases/payments",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SupplierPayments"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SupplierPayments"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer purchases/payments",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/purchases/payments/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer purchases/payments",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SupplierPayments"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire purchases/payments par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SupplierPayments"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SupplierPayments"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier purchases/payments",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/purchases/returns": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "return_number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "supplier_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "reason",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "total",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "reception_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "purchase_order_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "po_amendment_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "return_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "returned_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "warehouse_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/SupplierReturns"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister purchases/returns",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SupplierReturns"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SupplierReturns"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer purchases/returns",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/purchases/returns/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer purchases/returns",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SupplierReturns"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire purchases/returns par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SupplierReturns"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SupplierReturns"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier purchases/returns",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/purchases/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer purchases",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PurchaseOrders"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire purchases par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PurchaseOrders"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PurchaseOrders"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier purchases",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/purchases/{id}/amendments": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/procurement/interfaces/http/procurement_po_amendments.go",
        "x-avia-documented": false
      },
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/procurement/interfaces/http/procurement_po_amendments.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/purchases/{id}/close-balance": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/procurement/interfaces/http/procurement_amendments.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/purchases/{id}/receive": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/purchase/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/purchases/{id}/reduce-quantities": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/procurement/interfaces/http/procurement_amendments.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/purchases/{id}/status": {
      "patch": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/purchase/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/quality-certificates": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "certificate_number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "title",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "product_name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "supplier_name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "reference_standards",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "issue_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "expiry_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "description",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "inspector",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "batch_number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/QualityCertificates"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister quality-certificates",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/QualityCertificates"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/QualityCertificates"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer quality-certificates",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/quality-certificates/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer quality-certificates",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/QualityCertificates"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire quality-certificates par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/QualityCertificates"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/QualityCertificates"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier quality-certificates",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/quality-control-checkpoints": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "plan_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "criteria_name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "criteria_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "target_value",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "min_value",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "max_value",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "unit",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "is_critical",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "sequence",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "measurement_tool",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "sample_size",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "control_method",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "reaction_plan",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/QualityControlCriteria"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister quality-control-checkpoints",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/QualityControlCriteria"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/QualityControlCriteria"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer quality-control-checkpoints",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/quality-control-checkpoints/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer quality-control-checkpoints",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/QualityControlCriteria"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire quality-control-checkpoints par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/QualityControlCriteria"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/QualityControlCriteria"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier quality-control-checkpoints",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/quality-control-criteria": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "plan_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "criteria_name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "criteria_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "target_value",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "min_value",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "max_value",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "unit",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "is_critical",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "sequence",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "measurement_tool",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "sample_size",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "control_method",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "reaction_plan",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/QualityControlCriteria"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister quality-control-criteria",
        "tags": [
          "quality"
        ],
        "x-avia-documented": true,
        "x-avia-module": "quality"
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/QualityControlCriteria"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/QualityControlCriteria"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer quality-control-criteria",
        "tags": [
          "quality"
        ],
        "x-avia-documented": true,
        "x-avia-module": "quality"
      }
    },
    "/api/v1/quality-control-criteria/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer quality-control-criteria",
        "tags": [
          "quality"
        ],
        "x-avia-documented": true,
        "x-avia-module": "quality"
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/QualityControlCriteria"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire quality-control-criteria par id",
        "tags": [
          "quality"
        ],
        "x-avia-documented": true,
        "x-avia-module": "quality"
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/QualityControlCriteria"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/QualityControlCriteria"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier quality-control-criteria",
        "tags": [
          "quality"
        ],
        "x-avia-documented": true,
        "x-avia-module": "quality"
      }
    },
    "/api/v1/quality-control-plans": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "article_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "operation_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "frequency",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "description",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "is_active",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "plan_number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/QualityControlPlans"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister quality-control-plans",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/QualityControlPlans"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/QualityControlPlans"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer quality-control-plans",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/quality-control-plans/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer quality-control-plans",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/QualityControlPlans"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire quality-control-plans par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/QualityControlPlans"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/QualityControlPlans"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier quality-control-plans",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/quality/audit-plans": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "description",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "audit_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "scope",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "standard",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "department",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "planned_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "lead_auditor_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "deleted_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/AuditPlans"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister quality/audit-plans",
        "tags": [
          "quality"
        ],
        "x-avia-documented": true,
        "x-avia-module": "quality"
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AuditPlans"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuditPlans"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer quality/audit-plans",
        "tags": [
          "quality"
        ],
        "x-avia-documented": true,
        "x-avia-module": "quality"
      }
    },
    "/api/v1/quality/audit-plans/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer quality/audit-plans",
        "tags": [
          "quality"
        ],
        "x-avia-documented": true,
        "x-avia-module": "quality"
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuditPlans"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire quality/audit-plans par id",
        "tags": [
          "quality"
        ],
        "x-avia-documented": true,
        "x-avia-module": "quality"
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AuditPlans"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuditPlans"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier quality/audit-plans",
        "tags": [
          "quality"
        ],
        "x-avia-documented": true,
        "x-avia-module": "quality"
      }
    },
    "/api/v1/quality/audits": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "audit_plan_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "audit_number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "title",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "audit_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "scope",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "scheduled_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "actual_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "lead_auditor_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "findings_count",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "nc_count",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "score",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "summary",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "deleted_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/Audits"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister quality/audits",
        "tags": [
          "quality"
        ],
        "x-avia-documented": true,
        "x-avia-module": "quality"
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Audits"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Audits"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer quality/audits",
        "tags": [
          "quality"
        ],
        "x-avia-documented": true,
        "x-avia-module": "quality"
      }
    },
    "/api/v1/quality/audits/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer quality/audits",
        "tags": [
          "quality"
        ],
        "x-avia-documented": true,
        "x-avia-module": "quality"
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Audits"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire quality/audits par id",
        "tags": [
          "quality"
        ],
        "x-avia-documented": true,
        "x-avia-module": "quality"
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Audits"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Audits"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier quality/audits",
        "tags": [
          "quality"
        ],
        "x-avia-documented": true,
        "x-avia-module": "quality"
      }
    },
    "/api/v1/quality/capa": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "action_number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "title",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "description",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "source_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "source_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "non_conformity_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "audit_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "root_cause",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "action_plan",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "priority",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "assigned_to",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "due_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "completed_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "verified_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "verified_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "effectiveness",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "deleted_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "responsible_name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "ai_suggestions",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "action_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "root_cause_category",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "completion_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "verification_result",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/CorrectiveActions"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister quality/capa",
        "tags": [
          "quality"
        ],
        "x-avia-documented": true,
        "x-avia-module": "quality"
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CorrectiveActions"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CorrectiveActions"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer quality/capa",
        "tags": [
          "quality"
        ],
        "x-avia-documented": true,
        "x-avia-module": "quality"
      }
    },
    "/api/v1/quality/capa/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer quality/capa",
        "tags": [
          "quality"
        ],
        "x-avia-documented": true,
        "x-avia-module": "quality"
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CorrectiveActions"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire quality/capa par id",
        "tags": [
          "quality"
        ],
        "x-avia-documented": true,
        "x-avia-module": "quality"
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CorrectiveActions"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CorrectiveActions"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier quality/capa",
        "tags": [
          "quality"
        ],
        "x-avia-documented": true,
        "x-avia-module": "quality"
      }
    },
    "/api/v1/quality/control-plans": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "article_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "operation_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "frequency",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "description",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "is_active",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "plan_number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/QualityControlPlans"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister quality/control-plans",
        "tags": [
          "quality"
        ],
        "x-avia-documented": true,
        "x-avia-module": "quality"
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/QualityControlPlans"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/QualityControlPlans"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer quality/control-plans",
        "tags": [
          "quality"
        ],
        "x-avia-documented": true,
        "x-avia-module": "quality"
      }
    },
    "/api/v1/quality/control-plans/article/{articleId}": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/quality/interfaces/http/inspection_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/quality/control-plans/checks/{id}": {
      "delete": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/quality/interfaces/http/inspection_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/quality/control-plans/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer quality/control-plans",
        "tags": [
          "quality"
        ],
        "x-avia-documented": true,
        "x-avia-module": "quality"
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/QualityControlPlans"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire quality/control-plans par id",
        "tags": [
          "quality"
        ],
        "x-avia-documented": true,
        "x-avia-module": "quality"
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/QualityControlPlans"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/QualityControlPlans"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier quality/control-plans",
        "tags": [
          "quality"
        ],
        "x-avia-documented": true,
        "x-avia-module": "quality"
      }
    },
    "/api/v1/quality/control-plans/{id}/checks": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/quality/interfaces/http/inspection_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/quality/controls": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "control_number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "article_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "manufacturing_order_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "control_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "result",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "inspector_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "inspection_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "measurements",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "instrument_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/QualityControls"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister quality/controls",
        "tags": [
          "quality"
        ],
        "x-avia-documented": true,
        "x-avia-module": "quality"
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/QualityControls"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/QualityControls"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer quality/controls",
        "tags": [
          "quality"
        ],
        "x-avia-documented": true,
        "x-avia-module": "quality"
      }
    },
    "/api/v1/quality/controls/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer quality/controls",
        "tags": [
          "quality"
        ],
        "x-avia-documented": true,
        "x-avia-module": "quality"
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/QualityControls"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire quality/controls par id",
        "tags": [
          "quality"
        ],
        "x-avia-documented": true,
        "x-avia-module": "quality"
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/QualityControls"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/QualityControls"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier quality/controls",
        "tags": [
          "quality"
        ],
        "x-avia-documented": true,
        "x-avia-module": "quality"
      }
    },
    "/api/v1/quality/fmea": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "title",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "process_name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "team",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "risk_threshold",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "total_rpn",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "average_rpn",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "high_risk_count",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "action_required",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "completed_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "deleted_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "article_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/FmeaStudies"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister quality/fmea",
        "tags": [
          "quality"
        ],
        "x-avia-documented": true,
        "x-avia-module": "quality"
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/FmeaStudies"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FmeaStudies"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer quality/fmea",
        "tags": [
          "quality"
        ],
        "x-avia-documented": true,
        "x-avia-module": "quality"
      }
    },
    "/api/v1/quality/fmea/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer quality/fmea",
        "tags": [
          "quality"
        ],
        "x-avia-documented": true,
        "x-avia-module": "quality"
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FmeaStudies"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire quality/fmea par id",
        "tags": [
          "quality"
        ],
        "x-avia-documented": true,
        "x-avia-module": "quality"
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/FmeaStudies"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FmeaStudies"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier quality/fmea",
        "tags": [
          "quality"
        ],
        "x-avia-documented": true,
        "x-avia-module": "quality"
      }
    },
    "/api/v1/quality/fmea/{id}/risk-summary": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/quality/interfaces/http/fmea_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/quality/fmea/{studyId}/items": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/quality/interfaces/http/fmea_handler.go",
        "x-avia-documented": false
      },
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/quality/interfaces/http/fmea_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/quality/fmea/{studyId}/items/{id}": {
      "delete": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/quality/interfaces/http/fmea_handler.go",
        "x-avia-documented": false
      },
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/quality/interfaces/http/fmea_handler.go",
        "x-avia-documented": false
      },
      "put": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/quality/interfaces/http/fmea_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/quality/inspections": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/quality/interfaces/http/inspection_handler.go",
        "x-avia-documented": false
      },
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/quality/interfaces/http/inspection_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/quality/inspections/{id}": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/quality/interfaces/http/inspection_handler.go",
        "x-avia-documented": false
      },
      "put": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/quality/interfaces/http/inspection_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/quality/management-reviews": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "title",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "review_period",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "scheduled_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "conducted_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "chairperson_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "attendees",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "minutes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "conclusions",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "next_review_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "deleted_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/ManagementReviews"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister quality/management-reviews",
        "tags": [
          "quality"
        ],
        "x-avia-documented": true,
        "x-avia-module": "quality"
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ManagementReviews"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ManagementReviews"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer quality/management-reviews",
        "tags": [
          "quality"
        ],
        "x-avia-documented": true,
        "x-avia-module": "quality"
      }
    },
    "/api/v1/quality/management-reviews/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer quality/management-reviews",
        "tags": [
          "quality"
        ],
        "x-avia-documented": true,
        "x-avia-module": "quality"
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ManagementReviews"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire quality/management-reviews par id",
        "tags": [
          "quality"
        ],
        "x-avia-documented": true,
        "x-avia-module": "quality"
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ManagementReviews"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ManagementReviews"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier quality/management-reviews",
        "tags": [
          "quality"
        ],
        "x-avia-documented": true,
        "x-avia-module": "quality"
      }
    },
    "/api/v1/quality/nc": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "severity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "title",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "description",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "root_cause",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "corrective_action",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "preventive_action",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "article_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "detected_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "responsible",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "closed_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "closed_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "due_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "deleted_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "manufacturing_order_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "reception_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "incoming_inspection_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "source_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "workflow_step",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "source",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "assigned_to",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "cost_impact",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "affected_quantity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "affected_product",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "immediate_action",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "customer_impact",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/NonConformities"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister quality/nc",
        "tags": [
          "quality"
        ],
        "x-avia-documented": true,
        "x-avia-module": "quality"
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NonConformities"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NonConformities"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer quality/nc",
        "tags": [
          "quality"
        ],
        "x-avia-documented": true,
        "x-avia-module": "quality"
      }
    },
    "/api/v1/quality/nc/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer quality/nc",
        "tags": [
          "quality"
        ],
        "x-avia-documented": true,
        "x-avia-module": "quality"
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NonConformities"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire quality/nc par id",
        "tags": [
          "quality"
        ],
        "x-avia-documented": true,
        "x-avia-module": "quality"
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NonConformities"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NonConformities"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier quality/nc",
        "tags": [
          "quality"
        ],
        "x-avia-documented": true,
        "x-avia-module": "quality"
      }
    },
    "/api/v1/quality/nc/{id}/advance": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/quality/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/quality/nc/{id}/close": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/quality/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/quality/nc/{id}/status": {
      "patch": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/quality/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/quality/nc/{id}/workflow-log": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/quality/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/quality/non-conformities": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "severity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "title",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "description",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "root_cause",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "corrective_action",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "preventive_action",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "article_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "detected_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "responsible",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "closed_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "closed_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "due_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "deleted_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "manufacturing_order_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "reception_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "incoming_inspection_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "source_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "workflow_step",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "source",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "assigned_to",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "cost_impact",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "affected_quantity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "affected_product",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "immediate_action",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "customer_impact",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/NonConformities"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister quality/non-conformities",
        "tags": [
          "quality"
        ],
        "x-avia-documented": true,
        "x-avia-module": "quality"
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NonConformities"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NonConformities"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer quality/non-conformities",
        "tags": [
          "quality"
        ],
        "x-avia-documented": true,
        "x-avia-module": "quality"
      }
    },
    "/api/v1/quality/non-conformities/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer quality/non-conformities",
        "tags": [
          "quality"
        ],
        "x-avia-documented": true,
        "x-avia-module": "quality"
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NonConformities"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire quality/non-conformities par id",
        "tags": [
          "quality"
        ],
        "x-avia-documented": true,
        "x-avia-module": "quality"
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NonConformities"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NonConformities"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier quality/non-conformities",
        "tags": [
          "quality"
        ],
        "x-avia-documented": true,
        "x-avia-module": "quality"
      }
    },
    "/api/v1/quality/oee": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "workstation_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "record_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "availability",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "performance",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quality_rate",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "oee",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "planned_production_time",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "actual_production_time",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "total_pieces",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "good_pieces",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "oee_overall",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "recorded_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "deleted_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "workstation_name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/OeeRecords"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister quality/oee",
        "tags": [
          "quality"
        ],
        "x-avia-documented": true,
        "x-avia-module": "quality"
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/OeeRecords"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OeeRecords"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer quality/oee",
        "tags": [
          "quality"
        ],
        "x-avia-documented": true,
        "x-avia-module": "quality"
      }
    },
    "/api/v1/quality/oee/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer quality/oee",
        "tags": [
          "quality"
        ],
        "x-avia-documented": true,
        "x-avia-module": "quality"
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OeeRecords"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire quality/oee par id",
        "tags": [
          "quality"
        ],
        "x-avia-documented": true,
        "x-avia-module": "quality"
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/OeeRecords"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OeeRecords"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier quality/oee",
        "tags": [
          "quality"
        ],
        "x-avia-documented": true,
        "x-avia-module": "quality"
      }
    },
    "/api/v1/quality/review-actions": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "review_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "category",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "description",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "responsible_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "responsible_name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "due_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "priority",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "completed_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "evidence",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/ReviewActions"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister quality/review-actions",
        "tags": [
          "quality"
        ],
        "x-avia-documented": true,
        "x-avia-module": "quality"
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ReviewActions"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReviewActions"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer quality/review-actions",
        "tags": [
          "quality"
        ],
        "x-avia-documented": true,
        "x-avia-module": "quality"
      }
    },
    "/api/v1/quality/review-actions/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer quality/review-actions",
        "tags": [
          "quality"
        ],
        "x-avia-documented": true,
        "x-avia-module": "quality"
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReviewActions"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire quality/review-actions par id",
        "tags": [
          "quality"
        ],
        "x-avia-documented": true,
        "x-avia-module": "quality"
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ReviewActions"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReviewActions"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier quality/review-actions",
        "tags": [
          "quality"
        ],
        "x-avia-documented": true,
        "x-avia-module": "quality"
      }
    },
    "/api/v1/quality/reviews": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "title",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "review_period",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "scheduled_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "conducted_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "chairperson_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "attendees",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "minutes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "conclusions",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "next_review_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "deleted_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/ManagementReviews"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister quality/reviews",
        "tags": [
          "quality"
        ],
        "x-avia-documented": true,
        "x-avia-module": "quality"
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ManagementReviews"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ManagementReviews"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer quality/reviews",
        "tags": [
          "quality"
        ],
        "x-avia-documented": true,
        "x-avia-module": "quality"
      }
    },
    "/api/v1/quality/reviews/overdue-actions": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "generique:quality/reviews/overdue-actions (table introuvable dans le schema de reference)",
        "x-avia-documented": false
      }
    },
    "/api/v1/quality/reviews/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer quality/reviews",
        "tags": [
          "quality"
        ],
        "x-avia-documented": true,
        "x-avia-module": "quality"
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ManagementReviews"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire quality/reviews par id",
        "tags": [
          "quality"
        ],
        "x-avia-documented": true,
        "x-avia-module": "quality"
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ManagementReviews"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ManagementReviews"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier quality/reviews",
        "tags": [
          "quality"
        ],
        "x-avia-documented": true,
        "x-avia-module": "quality"
      }
    },
    "/api/v1/quality/reviews/{id}/action-stats": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/quality/interfaces/http/review_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/quality/reviews/{id}/actions": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/quality/interfaces/http/review_handler.go",
        "x-avia-documented": false
      },
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/quality/interfaces/http/review_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/quality/reviews/{id}/actions/{actionId}": {
      "put": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/quality/interfaces/http/review_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/quality/reviews/{id}/inputs": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/quality/interfaces/http/review_handler.go",
        "x-avia-documented": false
      },
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/quality/interfaces/http/review_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/quality/reviews/{id}/inputs/{inputId}/status": {
      "patch": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/quality/interfaces/http/review_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/quality/reviews/{id}/kpi-summary": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/quality/interfaces/http/review_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/quality/stats": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/quality/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/quality/tracking-records": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "record_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "title",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "nc_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "manufacturing_order_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "owner_name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "content",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "due_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "closed_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "deleted_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/QualityTrackingRecords"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister quality/tracking-records",
        "tags": [
          "quality"
        ],
        "x-avia-documented": true,
        "x-avia-module": "quality"
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/QualityTrackingRecords"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/QualityTrackingRecords"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer quality/tracking-records",
        "tags": [
          "quality"
        ],
        "x-avia-documented": true,
        "x-avia-module": "quality"
      }
    },
    "/api/v1/quality/tracking-records/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer quality/tracking-records",
        "tags": [
          "quality"
        ],
        "x-avia-documented": true,
        "x-avia-module": "quality"
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/QualityTrackingRecords"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire quality/tracking-records par id",
        "tags": [
          "quality"
        ],
        "x-avia-documented": true,
        "x-avia-module": "quality"
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/QualityTrackingRecords"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/QualityTrackingRecords"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier quality/tracking-records",
        "tags": [
          "quality"
        ],
        "x-avia-documented": true,
        "x-avia-module": "quality"
      }
    },
    "/api/v1/quote-approvals": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quote_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "approver_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "comment",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "approved_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "approval_level",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/QuoteApprovals"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister quote-approvals",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/QuoteApprovals"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/QuoteApprovals"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer quote-approvals",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/quote-approvals/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer quote-approvals",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/QuoteApprovals"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire quote-approvals par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/QuoteApprovals"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/QuoteApprovals"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier quote-approvals",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/quote-items": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quote_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "article_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "description",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quantity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "unit_price",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "discount",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "tax_rate",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "total",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "position",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "discount_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "fodec_rate",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "sort_order",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "unit",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "line_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "service_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "parent_section_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "needs_manufacturing",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "manufacturing_order_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "discount_2",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "discount_2_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim1_value_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim2_value_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim_set",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/QuoteItems"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister quote-items",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/QuoteItems"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/QuoteItems"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer quote-items",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/quote-items/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer quote-items",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/QuoteItems"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire quote-items par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/QuoteItems"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/QuoteItems"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier quote-items",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/quotes": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "client_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "valid_until",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "subtotal",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "tax_amount",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "total",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "approved_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "approved_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "deleted_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quote_number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "terms",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "payment_term_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "payment_method",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "currency",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "exchange_rate",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "subject",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "incoterms",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "delivery_address",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "discount",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "fodec_amount",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "stamp_duty",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "affair_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "technical_study_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "source_chiffrage_name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "opportunity_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "archived_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "archived_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "discount_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "discount_2",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "discount_2_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "contact_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim1_value_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim2_value_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim_set",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/Quotes"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister quotes",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Quotes"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Quotes"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer quotes",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/quotes/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer quotes",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Quotes"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire quotes par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Quotes"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Quotes"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier quotes",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/quotes/{id}/status": {
      "patch": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/quote/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/reception-items": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "reception_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "article_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "ordered_qty",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "received_qty",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quality_status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "lot_number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "warehouse_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "serial_number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "description",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "unit",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quantity_rejected",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "unit_price",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "tax_rate",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "discount_rate",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "total_ht",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "total_ttc",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "location_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim1_value_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim2_value_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim_set",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/ReceptionItems"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister reception-items",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ReceptionItems"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReceptionItems"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer reception-items",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/reception-items/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer reception-items",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReceptionItems"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire reception-items par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ReceptionItems"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReceptionItems"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier reception-items",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/receptions": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "reception_number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "purchase_order_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "supplier_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "reception_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "received_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "affair_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "archived_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "archived_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "supplier_bl",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim1_value_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim2_value_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim_set",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "warehouse_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/Receptions"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister receptions",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Receptions"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Receptions"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer receptions",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/receptions/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer receptions",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Receptions"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire receptions par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Receptions"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Receptions"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier receptions",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/recurring-invoices": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "client_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "label",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "frequency",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "start_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "end_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "next_run",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "template",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "last_invoice_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "last_run_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "generated_count",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/RecurringInvoices"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister recurring-invoices",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RecurringInvoices"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RecurringInvoices"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer recurring-invoices",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/recurring-invoices/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer recurring-invoices",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RecurringInvoices"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire recurring-invoices par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RecurringInvoices"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RecurringInvoices"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier recurring-invoices",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/reports": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/report/interfaces/http/handler.go",
        "x-avia-documented": false
      },
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/report/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/reports/favorites": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/report/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/reports/{id}": {
      "delete": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/report/interfaces/http/handler.go",
        "x-avia-documented": false
      },
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/report/interfaces/http/handler.go",
        "x-avia-documented": false
      },
      "put": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/report/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/reports/{id}/duplicate": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/report/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/reports/{id}/execute": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/report/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/reports/{id}/export": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/report/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/reports/{id}/favorite": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/report/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/reports/{id}/schedule": {
      "put": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/report/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/returns": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "return_number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "entity_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "reason",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "total",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/Returns"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister returns",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Returns"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Returns"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer returns",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/returns/clients": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "return_number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "client_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "invoice_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "reason",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "total",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "warehouse_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/ClientReturns"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister returns/clients",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ClientReturns"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ClientReturns"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer returns/clients",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/returns/clients/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer returns/clients",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ClientReturns"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire returns/clients par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ClientReturns"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ClientReturns"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier returns/clients",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/returns/suppliers": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "return_number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "supplier_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "reason",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "total",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "reception_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "purchase_order_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "po_amendment_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "return_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "returned_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "warehouse_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/SupplierReturns"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister returns/suppliers",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SupplierReturns"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SupplierReturns"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer returns/suppliers",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/returns/suppliers/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer returns/suppliers",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SupplierReturns"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire returns/suppliers par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SupplierReturns"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SupplierReturns"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier returns/suppliers",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/returns/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer returns",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Returns"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire returns par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Returns"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Returns"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier returns",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/rfq": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "rfq_number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "supplier_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "deadline",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "response_deadline",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "opportunity_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "purchase_request_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "consultation_batch_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "archived_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "archived_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "affair_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim1_value_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim2_value_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim_set",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/SupplierRfqs"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister rfq",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SupplierRfqs"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SupplierRfqs"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer rfq",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/rfq-items": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "rfq_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "article_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quantity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "unit_price",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "supplier_rfq_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "specifications",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "discount_percent",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "delivery_days",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "tax_rate",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "position",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim1_value_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim2_value_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim_set",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/SupplierRfqItems"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister rfq-items",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SupplierRfqItems"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SupplierRfqItems"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer rfq-items",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/rfq-items/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer rfq-items",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SupplierRfqItems"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire rfq-items par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SupplierRfqItems"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SupplierRfqItems"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier rfq-items",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/rfq-suppliers": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "rfq_number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "supplier_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "deadline",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "response_deadline",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "opportunity_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "purchase_request_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "consultation_batch_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "archived_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "archived_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "affair_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim1_value_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim2_value_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim_set",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/SupplierRfqs"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister rfq-suppliers",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SupplierRfqs"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SupplierRfqs"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer rfq-suppliers",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/rfq-suppliers/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer rfq-suppliers",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SupplierRfqs"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire rfq-suppliers par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SupplierRfqs"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SupplierRfqs"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier rfq-suppliers",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/rfq/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer rfq",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SupplierRfqs"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire rfq par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SupplierRfqs"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SupplierRfqs"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier rfq",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/rfq/{id}/comparison": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/procurement/interfaces/http/procurement_extended.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/rfqs": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "rfq_number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "supplier_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "deadline",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "response_deadline",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "opportunity_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "purchase_request_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "consultation_batch_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "archived_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "archived_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "affair_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim1_value_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim2_value_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim_set",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/SupplierRfqs"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister rfqs",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SupplierRfqs"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SupplierRfqs"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer rfqs",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/rfqs/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer rfqs",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SupplierRfqs"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire rfqs par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SupplierRfqs"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SupplierRfqs"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier rfqs",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/risks": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "risk_code",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "title",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "description",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "category",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "asset",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "threat",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "vulnerability",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "likelihood",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "impact",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "risk_level",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "treatment",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "treatment_plan",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "owner",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "review_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/RiskAssessments"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister risks",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RiskAssessments"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RiskAssessments"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer risks",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/risks/affair/{id}": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/risk/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/risks/evaluate": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/risk/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/risks/flow/{flowId}": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/risk/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/risks/manufacturing-order/{id}": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/risk/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/risks/summary": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/risk/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/risks/summary/all": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/risk/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/risks/{entite}/{id}": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/risk/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/risks/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer risks",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RiskAssessments"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire risks par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RiskAssessments"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RiskAssessments"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier risks",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/roles": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "display_name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "description",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "permissions",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "is_system",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "is_active",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/Roles"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister roles",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Roles"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Roles"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer roles",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/roles/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer roles",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Roles"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire roles par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Roles"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Roles"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier roles",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/routing-operations": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "bom_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "manufacturing_order_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "workstation_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "operation_number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "description",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "standard_time_minutes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "actual_time_minutes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "setup_time_minutes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "started_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "completed_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "operator_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quality_check_required",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quality_check_passed",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/RoutingOperations"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister routing-operations",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RoutingOperations"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RoutingOperations"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer routing-operations",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/routing-operations/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer routing-operations",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RoutingOperations"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire routing-operations par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RoutingOperations"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RoutingOperations"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier routing-operations",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/rpc/archive_document": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/rpc/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/rpc/convert-quote/{quoteId}": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/rpc/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/rpc/convert-quote/{quoteId}/invoice": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/rpc/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/rpc/convert_quote_to_invoice": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/rpc/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/rpc/convert_quote_to_sales_order": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "generique:rpc/convert_quote_to_sales_order (__special__)",
        "x-avia-documented": false
      },
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/rpc/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/rpc/convert_supplier_rfq_to_purchase_order": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/rpc/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/rpc/create-client": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/rpc/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/rpc/create-mfg-order/{salesOrderId}": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/rpc/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/rpc/create_client": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/rpc/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/rpc/create_manufacturing_order_from_sales_order": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "generique:rpc/create_manufacturing_order_from_sales_order (__special__)",
        "x-avia-documented": false
      },
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/rpc/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/rpc/get-next-code": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/rpc/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/rpc/get_next_number": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/rpc/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/rpc/has-mfg-orders/{salesOrderId}": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/rpc/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/rpc/mrp/{orderId}": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/rpc/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/rpc/order-history/{orderId}": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/rpc/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/rpc/order-status-log/{orderId}": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/rpc/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/rpc/pause-operation/{operationId}": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/rpc/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/rpc/pause_operation": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/rpc/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/rpc/preview_next_number": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/rpc/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/rpc/process_quote_approval": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "generique:rpc/process_quote_approval (__special__)",
        "x-avia-documented": false
      },
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/rpc/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/rpc/quote-approval/{quoteId}": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/rpc/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/rpc/resume-operation/{operationId}": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/rpc/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/rpc/resume_operation": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/rpc/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/rpc/tools-check/{operationId}": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/rpc/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/rule-parameters": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "rule_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "scope_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "scope_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "params",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "active",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/RuleParameters"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister rule-parameters",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RuleParameters"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RuleParameters"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer rule-parameters",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/rule-parameters/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer rule-parameters",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RuleParameters"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire rule-parameters par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RuleParameters"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RuleParameters"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier rule-parameters",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/rules/packs": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "cmd/business-service/main.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/rules/packs/export/{code}": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "cmd/business-service/main.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/rules/packs/import": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "cmd/business-service/main.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/rules/packs/import/preview": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "cmd/business-service/main.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/rules/packs/{code}/apply": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "cmd/business-service/main.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/rules/packs/{code}/simulate": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "cmd/business-service/main.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/rules/simulate": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "cmd/business-service/main.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/rules/types": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "cmd/business-service/main.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/sales-order-items": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "sales_order_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "article_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "description",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quantity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "unit_price",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "discount_percent",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "tax_rate_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "line_total",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "position",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "tax_rate",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "fodec_rate",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "discount_2",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "discount_2_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quote_item_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim1_value_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim2_value_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim_set",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "promised_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "warehouse_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "reserved_qty",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "ctp_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/SalesOrderItems"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister sales-order-items",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SalesOrderItems"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SalesOrderItems"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer sales-order-items",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/sales-order-items/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer sales-order-items",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SalesOrderItems"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire sales-order-items par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SalesOrderItems"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SalesOrderItems"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier sales-order-items",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/sales-orders": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "order_number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "client_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "order_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "delivery_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "subtotal",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "tax_total",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "total",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "currency",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "payment_term_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "deleted_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "delivered_quantity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "invoiced_amount",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "shipping_address",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "billing_address",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "priority",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "source",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "requested_delivery_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "discount_amount",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "tva_amount",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "total_amount",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "affair_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quote_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "archived_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "archived_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "customer_po",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "fodec_amount",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "discount_2",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "discount_2_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim1_value_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim2_value_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim_set",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "confirmed_delivery_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "warehouse_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/SalesOrders"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister sales-orders",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SalesOrders"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SalesOrders"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer sales-orders",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/sales-orders/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer sales-orders",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SalesOrders"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire sales-orders par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SalesOrders"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SalesOrders"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier sales-orders",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/sales-orders/{id}/promise": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "cmd/business-service/main.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/sales/order-items": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "sales_order_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "article_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "description",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quantity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "unit_price",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "discount_percent",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "tax_rate_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "line_total",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "position",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "tax_rate",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "fodec_rate",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "discount_2",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "discount_2_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quote_item_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim1_value_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim2_value_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim_set",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "promised_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "warehouse_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "reserved_qty",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "ctp_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/SalesOrderItems"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister sales/order-items",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SalesOrderItems"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SalesOrderItems"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer sales/order-items",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/sales/order-items/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer sales/order-items",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SalesOrderItems"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire sales/order-items par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SalesOrderItems"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SalesOrderItems"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier sales/order-items",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/sales/orders": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "order_number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "client_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "order_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "delivery_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "subtotal",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "tax_total",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "total",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "currency",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "payment_term_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "deleted_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "delivered_quantity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "invoiced_amount",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "shipping_address",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "billing_address",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "priority",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "source",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "requested_delivery_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "discount_amount",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "tva_amount",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "total_amount",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "affair_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quote_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "archived_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "archived_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "customer_po",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "fodec_amount",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "discount_2",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "discount_2_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim1_value_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim2_value_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim_set",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "confirmed_delivery_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "warehouse_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/SalesOrders"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister sales/orders",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SalesOrders"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SalesOrders"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer sales/orders",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/sales/orders/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer sales/orders",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SalesOrders"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire sales/orders par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SalesOrders"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SalesOrders"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier sales/orders",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/sensitive-fields": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "table_name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "column_name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "active",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/SensitiveFields"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister sensitive-fields",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SensitiveFields"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SensitiveFields"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer sensitive-fields",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/sensitive-fields/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer sensitive-fields",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SensitiveFields"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire sensitive-fields par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SensitiveFields"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SensitiveFields"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier sensitive-fields",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/serials/{serial}": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/stock/interfaces/http/serial_fiche_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/service-contracts": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "provider",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "equipment_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "start_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "end_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "annual_cost",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "coverage",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "client_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "contract_number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "monthly_fee",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "annual_fee",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "includes_parts",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "includes_labor",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "max_interventions_year",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "response_time_hours",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "auto_renew",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "description",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "sla_response_hours",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "sla_resolution_hours",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/ServiceContracts"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister service-contracts",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ServiceContracts"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceContracts"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer service-contracts",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/service-contracts/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer service-contracts",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceContracts"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire service-contracts par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ServiceContracts"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceContracts"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier service-contracts",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/settings": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "company_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "key",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "value",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "category",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/CompanySettings"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister settings",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CompanySettings"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CompanySettings"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer settings",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/settings/api-keys": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/apikeys/interfaces/http/handler.go",
        "x-avia-documented": false
      },
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/apikeys/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/settings/api-keys/{id}": {
      "delete": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/apikeys/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/settings/currencies": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "code",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "symbol",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "active",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "decimal_places",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "is_default",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/Currencies"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister settings/currencies",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Currencies"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Currencies"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer settings/currencies",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/settings/currencies/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer settings/currencies",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Currencies"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire settings/currencies par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Currencies"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Currencies"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier settings/currencies",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/settings/discounts": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "value",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "min_quantity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "min_amount",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "client_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "article_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "start_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "end_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "active",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/DiscountRules"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister settings/discounts",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DiscountRules"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DiscountRules"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer settings/discounts",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/settings/discounts/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer settings/discounts",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DiscountRules"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire settings/discounts par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DiscountRules"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DiscountRules"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier settings/discounts",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/settings/email-provider": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "cmd/business-service/main.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/settings/numbering": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "entity_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "prefix",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "current_number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "padding",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "reset_yearly",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "last_reset_year",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "last_reset_month",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/NumberingSequences"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister settings/numbering",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NumberingSequences"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NumberingSequences"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer settings/numbering",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/settings/numbering/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer settings/numbering",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NumberingSequences"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire settings/numbering par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NumberingSequences"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NumberingSequences"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier settings/numbering",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/settings/payment-terms": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "days",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "discount_percent",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "discount_days",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "description",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "active",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "code",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "end_of_month",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "is_default",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/PaymentTerms"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister settings/payment-terms",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PaymentTerms"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaymentTerms"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer settings/payment-terms",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/settings/payment-terms/reset-default": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "generique:settings/payment-terms/reset-default (__special__)",
        "x-avia-documented": false
      }
    },
    "/api/v1/settings/payment-terms/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer settings/payment-terms",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaymentTerms"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire settings/payment-terms par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PaymentTerms"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaymentTerms"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier settings/payment-terms",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/settings/permissions": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "user_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "permission",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "granted",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "module",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "can_read",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "can_create",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "can_update",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "can_delete",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "sub_module",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "flags",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/UserPermissions"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister settings/permissions",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UserPermissions"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserPermissions"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer settings/permissions",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/settings/permissions/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer settings/permissions",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserPermissions"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire settings/permissions par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UserPermissions"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserPermissions"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier settings/permissions",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/settings/price-lists": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "currency",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "start_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "end_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "active",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "code",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "list_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "is_default",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "description",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/PriceLists"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister settings/price-lists",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PriceLists"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PriceLists"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer settings/price-lists",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/settings/price-lists/items": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "price_list_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "article_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "unit_price",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "min_quantity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/PriceListItems"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister settings/price-lists/items",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PriceListItems"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PriceListItems"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer settings/price-lists/items",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/settings/price-lists/items/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer settings/price-lists/items",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PriceListItems"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire settings/price-lists/items par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PriceListItems"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PriceListItems"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier settings/price-lists/items",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/settings/price-lists/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer settings/price-lists",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PriceLists"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire settings/price-lists par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PriceLists"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PriceLists"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier settings/price-lists",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/settings/tax-rates": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "rate",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "country_code",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "active",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "is_active",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/TaxRates"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister settings/tax-rates",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TaxRates"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TaxRates"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer settings/tax-rates",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/settings/tax-rates/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer settings/tax-rates",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TaxRates"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire settings/tax-rates par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TaxRates"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TaxRates"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier settings/tax-rates",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/settings/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer settings",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CompanySettings"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire settings par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CompanySettings"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CompanySettings"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier settings",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/shipping-orders": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "delivery_number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "sales_order_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "client_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "delivery_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "carrier",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "tracking_number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "deleted_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "operation_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "archived_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "archived_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "subtotal",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "fodec_amount",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "tax_amount",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "total",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "due_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "contact_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "shipping_cost",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "total_weight",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "total_packages",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "shipping_method",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "shipping_address",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "shipping_city",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "shipping_country",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "actual_delivery",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim1_value_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim2_value_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim_set",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "warehouse_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/DeliveryNotes"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister shipping-orders",
        "tags": [
          "logistics"
        ],
        "x-avia-documented": true,
        "x-avia-module": "logistics"
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DeliveryNotes"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeliveryNotes"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer shipping-orders",
        "tags": [
          "logistics"
        ],
        "x-avia-documented": true,
        "x-avia-module": "logistics"
      }
    },
    "/api/v1/shipping-orders/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer shipping-orders",
        "tags": [
          "logistics"
        ],
        "x-avia-documented": true,
        "x-avia-module": "logistics"
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeliveryNotes"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire shipping-orders par id",
        "tags": [
          "logistics"
        ],
        "x-avia-documented": true,
        "x-avia-module": "logistics"
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DeliveryNotes"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeliveryNotes"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier shipping-orders",
        "tags": [
          "logistics"
        ],
        "x-avia-documented": true,
        "x-avia-module": "logistics"
      }
    },
    "/api/v1/shopfloor/articles/consumables": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/shopfloor/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/shopfloor/auth/pin": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/shopfloor/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/shopfloor/auth/refresh": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/shopfloor/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/shopfloor/consumables/request": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/shopfloor/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/shopfloor/employees/{id}/pin": {
      "delete": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/shopfloor/interfaces/http/handler.go",
        "x-avia-documented": false
      },
      "put": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/shopfloor/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/shopfloor/employees/{id}/pin-status": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/shopfloor/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/shopfloor/incidents": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/shopfloor/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/shopfloor/operations": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/shopfloor/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/shopfloor/operations/{id}/action": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/shopfloor/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/shopfloor/operations/{id}/progress": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/shopfloor/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/shopfloor/sessions": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/shopfloor/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/shopfloor/sync/pull": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/shopfloor/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/shopfloor/sync/push": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/shopfloor/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/smed-operations": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "smed_study_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "duration",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "operation_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "can_externalize",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "improvement",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "new_duration",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "position",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "sequence",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "description",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "current_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "current_duration",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "improved_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "improved_duration",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "improvement_action",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/SmedOperations"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister smed-operations",
        "tags": [
          "lean"
        ],
        "x-avia-documented": true,
        "x-avia-module": "lean"
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SmedOperations"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SmedOperations"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer smed-operations",
        "tags": [
          "lean"
        ],
        "x-avia-documented": true,
        "x-avia-module": "lean"
      }
    },
    "/api/v1/smed-operations/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer smed-operations",
        "tags": [
          "lean"
        ],
        "x-avia-documented": true,
        "x-avia-module": "lean"
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SmedOperations"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire smed-operations par id",
        "tags": [
          "lean"
        ],
        "x-avia-documented": true,
        "x-avia-module": "lean"
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SmedOperations"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SmedOperations"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier smed-operations",
        "tags": [
          "lean"
        ],
        "x-avia-documented": true,
        "x-avia-module": "lean"
      }
    },
    "/api/v1/smed-studies": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "workstation_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "current_changeover_time",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "target_changeover_time",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "title",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "achieved_changeover_time",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "reduction_percentage",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "deleted_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/SmedStudies"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister smed-studies",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SmedStudies"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SmedStudies"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer smed-studies",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/smed-studies/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer smed-studies",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SmedStudies"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire smed-studies par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SmedStudies"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SmedStudies"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier smed-studies",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/spc-measurements": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "value",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "timestamp",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "sample_group",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "characteristic",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "operator",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "instrument_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/SpcMeasurements"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister spc-measurements",
        "tags": [
          "quality"
        ],
        "x-avia-documented": true,
        "x-avia-module": "quality"
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SpcMeasurements"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SpcMeasurements"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer spc-measurements",
        "tags": [
          "quality"
        ],
        "x-avia-documented": true,
        "x-avia-module": "quality"
      }
    },
    "/api/v1/spc-measurements/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer spc-measurements",
        "tags": [
          "quality"
        ],
        "x-avia-documented": true,
        "x-avia-module": "quality"
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SpcMeasurements"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire spc-measurements par id",
        "tags": [
          "quality"
        ],
        "x-avia-documented": true,
        "x-avia-module": "quality"
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SpcMeasurements"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SpcMeasurements"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier spc-measurements",
        "tags": [
          "quality"
        ],
        "x-avia-documented": true,
        "x-avia-module": "quality"
      }
    },
    "/api/v1/status-machine/{table}": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "cmd/business-service/main.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/status-profile-assignments": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "profile_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "table_name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "scope_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "scope_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "active",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/StatusProfileAssignments"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister status-profile-assignments",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StatusProfileAssignments"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StatusProfileAssignments"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer status-profile-assignments",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/status-profile-assignments/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer status-profile-assignments",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StatusProfileAssignments"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire status-profile-assignments par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StatusProfileAssignments"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StatusProfileAssignments"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier status-profile-assignments",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/status-profiles": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "table_name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "transitions",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "roles_par_transition",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "active",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/StatusProfiles"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister status-profiles",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StatusProfiles"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StatusProfiles"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer status-profiles",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/status-profiles/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer status-profiles",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StatusProfiles"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire status-profiles par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StatusProfiles"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StatusProfiles"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier status-profiles",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/status-profiles/{id}/simulate": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "cmd/business-service/main.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/stock-adjustments": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "article_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "location_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "adjustment_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "previous_quantity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "new_quantity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "difference",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "reason",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "approved_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/StockAdjustments"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister stock-adjustments",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StockAdjustments"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StockAdjustments"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer stock-adjustments",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/stock-adjustments/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer stock-adjustments",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StockAdjustments"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire stock-adjustments par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StockAdjustments"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StockAdjustments"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier stock-adjustments",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/stock-locations": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "warehouse_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "code",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "zone",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "aisle",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "rack",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "shelf",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "active",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "location_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "is_active",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/WarehouseLocations"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister stock-locations",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WarehouseLocations"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WarehouseLocations"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer stock-locations",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/stock-locations/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer stock-locations",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WarehouseLocations"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire stock-locations par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WarehouseLocations"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WarehouseLocations"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier stock-locations",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/stock-reservations": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "article_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "warehouse_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quantity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "source_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "source_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "expires_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/StockReservations"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister stock-reservations",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StockReservations"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StockReservations"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer stock-reservations",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/stock-reservations/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer stock-reservations",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StockReservations"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire stock-reservations par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StockReservations"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StockReservations"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier stock-reservations",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/stock-transfer-lines": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "transfer_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "article_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quantity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "lot_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/StockTransferLines"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister stock-transfer-lines",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StockTransferLines"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StockTransferLines"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer stock-transfer-lines",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/stock-transfer-lines/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer stock-transfer-lines",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StockTransferLines"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire stock-transfer-lines par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StockTransferLines"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StockTransferLines"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier stock-transfer-lines",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/stock/alerts": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/stock/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/stock/integrity-anomalies": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "article_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "code",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "stock_quantity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "stock_value",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "allow_negative_stock",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "warehouse_quantity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "reconciliation_gap",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "anomaly",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/VStockIntegrityAnomalies"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister stock/integrity-anomalies",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/stock/integrity-anomalies/{id}": {
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VStockIntegrityAnomalies"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire stock/integrity-anomalies par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/stock/levels": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/stock/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/stock/locations": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "warehouse_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "code",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "zone",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "aisle",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "rack",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "shelf",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "active",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "location_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "is_active",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/WarehouseLocations"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister stock/locations",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WarehouseLocations"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WarehouseLocations"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer stock/locations",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/stock/locations/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer stock/locations",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WarehouseLocations"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire stock/locations par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WarehouseLocations"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WarehouseLocations"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier stock/locations",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/stock/lots": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "lot_number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "article_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "supplier_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "supplier_lot",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "manufacturing_order_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quantity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "remaining_quantity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "production_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "expiry_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quality_status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "warehouse_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/LotTracking"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister stock/lots",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LotTracking"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LotTracking"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer stock/lots",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/stock/lots/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer stock/lots",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LotTracking"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire stock/lots par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LotTracking"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LotTracking"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier stock/lots",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/stock/movement-anomalies": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "article_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "sku",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "article_name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "movement_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quantity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "avg_quantity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "z_score",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "reference_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "reference_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/VStockMovementAnomalies"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister stock/movement-anomalies",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/stock/movement-anomalies/{id}": {
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VStockMovementAnomalies"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire stock/movement-anomalies par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/stock/movements": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "article_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "warehouse_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quantity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "reference_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "reference_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "lot_number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "movement_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "version",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "from_location_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "to_location_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "unit_cost",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "affair_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim1_value_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim2_value_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim_set",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/StockMovements"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister stock/movements",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StockMovements"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StockMovements"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer stock/movements",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/stock/movements/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer stock/movements",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StockMovements"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire stock/movements par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StockMovements"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StockMovements"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier stock/movements",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/stock/rupture-forecast": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "article_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "sku",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "stock_quantity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "min_stock",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "reorder_point",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "daily_consumption",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "daily_consumption_30d",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "daily_consumption_90d",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "last_out_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "days_until_stockout",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "projected_stockout_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "severity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/VStockRuptureForecast"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister stock/rupture-forecast",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/stock/rupture-forecast/{id}": {
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VStockRuptureForecast"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire stock/rupture-forecast par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/stock/transfers": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "transfer_number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "from_warehouse_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "to_warehouse_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "transfer_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/StockTransfers"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister stock/transfers",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StockTransfers"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StockTransfers"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer stock/transfers",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/stock/transfers/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer stock/transfers",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StockTransfers"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire stock/transfers par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StockTransfers"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StockTransfers"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier stock/transfers",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/stock/warehouses": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "code",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "address",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "is_default",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "is_active",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "city",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "phone",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "manager_name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "postal_code",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "country",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "email",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/Warehouses"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister stock/warehouses",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Warehouses"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Warehouses"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer stock/warehouses",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/stock/warehouses/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer stock/warehouses",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Warehouses"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire stock/warehouses par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Warehouses"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Warehouses"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier stock/warehouses",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/storage/status": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "cmd/business-service/main.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/storage/{bucket}/list": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/storage/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/storage/{bucket}/object/{key}": {
      "delete": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/storage/interfaces/http/handler.go",
        "x-avia-documented": false
      },
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/storage/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/storage/{bucket}/public/{key}": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/storage/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/storage/{bucket}/sign/{key}": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/storage/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/storage/{bucket}/upload": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/storage/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/subcontracting-order-lines": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "order_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "description",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quantity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "unit_price",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "line_total",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "line_number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "article_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "unit",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim1_value_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim2_value_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim_set",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/SubcontractingOrderLines"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister subcontracting-order-lines",
        "tags": [
          "subcontracting"
        ],
        "x-avia-documented": true,
        "x-avia-module": "subcontracting"
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SubcontractingOrderLines"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SubcontractingOrderLines"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer subcontracting-order-lines",
        "tags": [
          "subcontracting"
        ],
        "x-avia-documented": true,
        "x-avia-module": "subcontracting"
      }
    },
    "/api/v1/subcontracting-order-lines/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer subcontracting-order-lines",
        "tags": [
          "subcontracting"
        ],
        "x-avia-documented": true,
        "x-avia-module": "subcontracting"
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SubcontractingOrderLines"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire subcontracting-order-lines par id",
        "tags": [
          "subcontracting"
        ],
        "x-avia-documented": true,
        "x-avia-module": "subcontracting"
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SubcontractingOrderLines"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SubcontractingOrderLines"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier subcontracting-order-lines",
        "tags": [
          "subcontracting"
        ],
        "x-avia-documented": true,
        "x-avia-module": "subcontracting"
      }
    },
    "/api/v1/subcontracting-orders": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "order_number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "subcontractor_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "manufacturing_order_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "total",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "due_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "affair_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "title",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "description",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "expected_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "service_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quantity_sent",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quantity_received",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "rfq_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim1_value_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim2_value_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim_set",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "warehouse_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/SubcontractingOrders"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister subcontracting-orders",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SubcontractingOrders"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SubcontractingOrders"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer subcontracting-orders",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/subcontracting-orders/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer subcontracting-orders",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SubcontractingOrders"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire subcontracting-orders par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SubcontractingOrders"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SubcontractingOrders"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier subcontracting-orders",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/subcontracting-receptions": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "reception_number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "order_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "subcontractor_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quantity_received",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quantity_rejected",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "reception_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "warehouse_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/SubcontractingReceptions"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister subcontracting-receptions",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SubcontractingReceptions"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SubcontractingReceptions"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer subcontracting-receptions",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/subcontracting-receptions/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer subcontracting-receptions",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SubcontractingReceptions"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire subcontracting-receptions par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SubcontractingReceptions"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SubcontractingReceptions"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier subcontracting-receptions",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/subcontracting-rework-orders": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "reference",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "source_order_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "subcontractor_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "subcontractor",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "order_reference",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "nc_reference",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "reason",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "description",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quantity_rejected",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quantity_returned",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quantity_recovered",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "priority",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "sent_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "received_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "completed_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/SubcontractingReworkOrders"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister subcontracting-rework-orders",
        "tags": [
          "subcontracting"
        ],
        "x-avia-documented": true,
        "x-avia-module": "subcontracting"
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SubcontractingReworkOrders"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SubcontractingReworkOrders"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer subcontracting-rework-orders",
        "tags": [
          "subcontracting"
        ],
        "x-avia-documented": true,
        "x-avia-module": "subcontracting"
      }
    },
    "/api/v1/subcontracting-rework-orders/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer subcontracting-rework-orders",
        "tags": [
          "subcontracting"
        ],
        "x-avia-documented": true,
        "x-avia-module": "subcontracting"
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SubcontractingReworkOrders"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire subcontracting-rework-orders par id",
        "tags": [
          "subcontracting"
        ],
        "x-avia-documented": true,
        "x-avia-module": "subcontracting"
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SubcontractingReworkOrders"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SubcontractingReworkOrders"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier subcontracting-rework-orders",
        "tags": [
          "subcontracting"
        ],
        "x-avia-documented": true,
        "x-avia-module": "subcontracting"
      }
    },
    "/api/v1/subcontracting-rfq": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "subcontractor_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "description",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "deadline",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "reference",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "title",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "total_estimated",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/SubcontractingRfq"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister subcontracting-rfq",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SubcontractingRfq"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SubcontractingRfq"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer subcontracting-rfq",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/subcontracting-rfq/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer subcontracting-rfq",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SubcontractingRfq"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire subcontracting-rfq par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SubcontractingRfq"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SubcontractingRfq"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier subcontracting-rfq",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/subcontracting/evaluations": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "subcontractor_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quality_score",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "delivery_score",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "price_score",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "overall_score",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "evaluation_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/SubcontractorEvaluations"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister subcontracting/evaluations",
        "tags": [
          "subcontracting"
        ],
        "x-avia-documented": true,
        "x-avia-module": "subcontracting"
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SubcontractorEvaluations"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SubcontractorEvaluations"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer subcontracting/evaluations",
        "tags": [
          "subcontracting"
        ],
        "x-avia-documented": true,
        "x-avia-module": "subcontracting"
      }
    },
    "/api/v1/subcontracting/evaluations/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer subcontracting/evaluations",
        "tags": [
          "subcontracting"
        ],
        "x-avia-documented": true,
        "x-avia-module": "subcontracting"
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SubcontractorEvaluations"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire subcontracting/evaluations par id",
        "tags": [
          "subcontracting"
        ],
        "x-avia-documented": true,
        "x-avia-module": "subcontracting"
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SubcontractorEvaluations"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SubcontractorEvaluations"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier subcontracting/evaluations",
        "tags": [
          "subcontracting"
        ],
        "x-avia-documented": true,
        "x-avia-module": "subcontracting"
      }
    },
    "/api/v1/subcontracting/receptions": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "reception_number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "order_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "subcontractor_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quantity_received",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quantity_rejected",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "reception_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "warehouse_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/SubcontractingReceptions"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister subcontracting/receptions",
        "tags": [
          "subcontracting"
        ],
        "x-avia-documented": true,
        "x-avia-module": "subcontracting"
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SubcontractingReceptions"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SubcontractingReceptions"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer subcontracting/receptions",
        "tags": [
          "subcontracting"
        ],
        "x-avia-documented": true,
        "x-avia-module": "subcontracting"
      }
    },
    "/api/v1/subcontracting/receptions/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer subcontracting/receptions",
        "tags": [
          "subcontracting"
        ],
        "x-avia-documented": true,
        "x-avia-module": "subcontracting"
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SubcontractingReceptions"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire subcontracting/receptions par id",
        "tags": [
          "subcontracting"
        ],
        "x-avia-documented": true,
        "x-avia-module": "subcontracting"
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SubcontractingReceptions"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SubcontractingReceptions"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier subcontracting/receptions",
        "tags": [
          "subcontracting"
        ],
        "x-avia-documented": true,
        "x-avia-module": "subcontracting"
      }
    },
    "/api/v1/subcontracting/rework-orders": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "reference",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "source_order_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "subcontractor_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "subcontractor",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "order_reference",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "nc_reference",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "reason",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "description",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quantity_rejected",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quantity_returned",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quantity_recovered",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "priority",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "sent_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "received_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "completed_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/SubcontractingReworkOrders"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister subcontracting/rework-orders",
        "tags": [
          "subcontracting"
        ],
        "x-avia-documented": true,
        "x-avia-module": "subcontracting"
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SubcontractingReworkOrders"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SubcontractingReworkOrders"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer subcontracting/rework-orders",
        "tags": [
          "subcontracting"
        ],
        "x-avia-documented": true,
        "x-avia-module": "subcontracting"
      }
    },
    "/api/v1/subcontracting/rework-orders/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer subcontracting/rework-orders",
        "tags": [
          "subcontracting"
        ],
        "x-avia-documented": true,
        "x-avia-module": "subcontracting"
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SubcontractingReworkOrders"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire subcontracting/rework-orders par id",
        "tags": [
          "subcontracting"
        ],
        "x-avia-documented": true,
        "x-avia-module": "subcontracting"
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SubcontractingReworkOrders"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SubcontractingReworkOrders"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier subcontracting/rework-orders",
        "tags": [
          "subcontracting"
        ],
        "x-avia-documented": true,
        "x-avia-module": "subcontracting"
      }
    },
    "/api/v1/subcontracting/subcontractors": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "code",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "contact_name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "email",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "phone",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "address",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "specialties",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "active",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/Subcontractors"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister subcontracting/subcontractors",
        "tags": [
          "subcontracting"
        ],
        "x-avia-documented": true,
        "x-avia-module": "subcontracting"
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Subcontractors"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Subcontractors"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer subcontracting/subcontractors",
        "tags": [
          "subcontracting"
        ],
        "x-avia-documented": true,
        "x-avia-module": "subcontracting"
      }
    },
    "/api/v1/subcontracting/subcontractors/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer subcontracting/subcontractors",
        "tags": [
          "subcontracting"
        ],
        "x-avia-documented": true,
        "x-avia-module": "subcontracting"
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Subcontractors"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire subcontracting/subcontractors par id",
        "tags": [
          "subcontracting"
        ],
        "x-avia-documented": true,
        "x-avia-module": "subcontracting"
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Subcontractors"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Subcontractors"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier subcontracting/subcontractors",
        "tags": [
          "subcontracting"
        ],
        "x-avia-documented": true,
        "x-avia-module": "subcontracting"
      }
    },
    "/api/v1/subcontractor-evaluations": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "subcontractor_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quality_score",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "delivery_score",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "price_score",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "overall_score",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "evaluation_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/SubcontractorEvaluations"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister subcontractor-evaluations",
        "tags": [
          "subcontracting"
        ],
        "x-avia-documented": true,
        "x-avia-module": "subcontracting"
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SubcontractorEvaluations"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SubcontractorEvaluations"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer subcontractor-evaluations",
        "tags": [
          "subcontracting"
        ],
        "x-avia-documented": true,
        "x-avia-module": "subcontracting"
      }
    },
    "/api/v1/subcontractor-evaluations/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer subcontractor-evaluations",
        "tags": [
          "subcontracting"
        ],
        "x-avia-documented": true,
        "x-avia-module": "subcontracting"
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SubcontractorEvaluations"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire subcontractor-evaluations par id",
        "tags": [
          "subcontracting"
        ],
        "x-avia-documented": true,
        "x-avia-module": "subcontracting"
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SubcontractorEvaluations"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SubcontractorEvaluations"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier subcontractor-evaluations",
        "tags": [
          "subcontracting"
        ],
        "x-avia-documented": true,
        "x-avia-module": "subcontracting"
      }
    },
    "/api/v1/supplier-evaluations": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "supplier_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "evaluation_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quality_score",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "delivery_score",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "price_score",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "service_score",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "overall_score",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "evaluator_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/SupplierEvaluations"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister supplier-evaluations",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SupplierEvaluations"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SupplierEvaluations"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer supplier-evaluations",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/supplier-evaluations/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer supplier-evaluations",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SupplierEvaluations"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire supplier-evaluations par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SupplierEvaluations"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SupplierEvaluations"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier supplier-evaluations",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/supplier-invoice-items": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "supplier_invoice_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "article_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quantity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "unit_price",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "line_total",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "description",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "discount",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "discount_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "tax_rate",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "fodec_rate",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "serial_number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "discount_2",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "discount_2_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim1_value_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim2_value_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim_set",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/SupplierInvoiceItems"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister supplier-invoice-items",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SupplierInvoiceItems"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SupplierInvoiceItems"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer supplier-invoice-items",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/supplier-invoice-items/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer supplier-invoice-items",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SupplierInvoiceItems"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire supplier-invoice-items par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SupplierInvoiceItems"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SupplierInvoiceItems"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier supplier-invoice-items",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/supplier-invoices": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "invoice_number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "supplier_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "purchase_order_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "invoice_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "due_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "subtotal",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "tax_total",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "total",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "global_discount",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "stamp_duty_included",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "affair_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "archived_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "archived_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim1_value_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim2_value_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim_set",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "warehouse_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/SupplierInvoices"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister supplier-invoices",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SupplierInvoices"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SupplierInvoices"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer supplier-invoices",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/supplier-invoices/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer supplier-invoices",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SupplierInvoices"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire supplier-invoices par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SupplierInvoices"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SupplierInvoices"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier supplier-invoices",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/supplier-invoices/{id}/validate": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/procurement/interfaces/http/procurement_extended.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/supplier-material-certificates": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "supplier_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "article_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "title",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "certificate_number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "file_url",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "expiry_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "standard",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "is_active",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/SupplierMaterialCertificates"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister supplier-material-certificates",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SupplierMaterialCertificates"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SupplierMaterialCertificates"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer supplier-material-certificates",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/supplier-material-certificates/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer supplier-material-certificates",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SupplierMaterialCertificates"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire supplier-material-certificates par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SupplierMaterialCertificates"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SupplierMaterialCertificates"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier supplier-material-certificates",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/supplier-payments": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "supplier_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "supplier_invoice_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "amount",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "payment_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "payment_method",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "reference",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/SupplierPayments"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister supplier-payments",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SupplierPayments"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SupplierPayments"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer supplier-payments",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/supplier-payments/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer supplier-payments",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SupplierPayments"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire supplier-payments par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SupplierPayments"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SupplierPayments"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier supplier-payments",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/supplier-return-items": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "supplier_return_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "article_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quantity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "reason",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "reception_item_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quantity_returned",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "description",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "unit",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/SupplierReturnItems"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister supplier-return-items",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SupplierReturnItems"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SupplierReturnItems"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer supplier-return-items",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/supplier-return-items/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer supplier-return-items",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SupplierReturnItems"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire supplier-return-items par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SupplierReturnItems"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SupplierReturnItems"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier supplier-return-items",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/supplier-returns-list": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "return_number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "supplier_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "reason",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "total",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "reception_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "purchase_order_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "po_amendment_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "return_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "returned_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "warehouse_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/SupplierReturns"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister supplier-returns-list",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SupplierReturns"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SupplierReturns"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer supplier-returns-list",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/supplier-returns-list/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer supplier-returns-list",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SupplierReturns"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire supplier-returns-list par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SupplierReturns"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SupplierReturns"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier supplier-returns-list",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/supplier-rfq-items": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "rfq_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "article_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quantity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "unit_price",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "supplier_rfq_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "specifications",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "discount_percent",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "delivery_days",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "tax_rate",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "position",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim1_value_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim2_value_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim_set",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/SupplierRfqItems"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister supplier-rfq-items",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SupplierRfqItems"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SupplierRfqItems"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer supplier-rfq-items",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/supplier-rfq-items/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer supplier-rfq-items",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SupplierRfqItems"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire supplier-rfq-items par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SupplierRfqItems"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SupplierRfqItems"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier supplier-rfq-items",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/supplier-rfqs": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "rfq_number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "supplier_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "deadline",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "response_deadline",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "opportunity_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "purchase_request_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "consultation_batch_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "archived_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "archived_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "affair_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim1_value_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim2_value_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim_set",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/SupplierRfqs"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister supplier-rfqs",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SupplierRfqs"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SupplierRfqs"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer supplier-rfqs",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/supplier-rfqs/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer supplier-rfqs",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SupplierRfqs"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire supplier-rfqs par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SupplierRfqs"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SupplierRfqs"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier supplier-rfqs",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/suppliers": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "code",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "email",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "phone",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "address",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "city",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "country",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "tax_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "contact_person",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "payment_terms",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "rating",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "is_active",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "deleted_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "supplier_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "registration_number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "website",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "activity_sector",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "classification",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "contact_title",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "postal_code",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "mobile",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "fax",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "delivery_delay",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "min_order_amount",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "payment_method",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "currency",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "default_incoterms",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "franco_amount",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "credit_limit",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "bank_name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "rib",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "swift_bic",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "certifications",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quality_notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "audit_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "audit_result",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "internal_memo",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "three_way_tolerance_pct",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "three_way_tolerance_amount",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "is_preferred",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "blocked",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/Suppliers"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister suppliers",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Suppliers"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Suppliers"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer suppliers",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/suppliers/evaluations": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "supplier_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "evaluation_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quality_score",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "delivery_score",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "price_score",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "service_score",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "overall_score",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "evaluator_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/SupplierEvaluations"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister suppliers/evaluations",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SupplierEvaluations"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SupplierEvaluations"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer suppliers/evaluations",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/suppliers/evaluations/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer suppliers/evaluations",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SupplierEvaluations"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire suppliers/evaluations par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SupplierEvaluations"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SupplierEvaluations"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier suppliers/evaluations",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/suppliers/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer suppliers",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Suppliers"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire suppliers par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Suppliers"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Suppliers"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier suppliers",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/support-tickets": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "number",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "subject",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "description",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "priority",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "category",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "sla_level",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "sla_deadline",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "assigned_to",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "escalated_to",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "escalated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "resolution",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "resolved_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "resolved_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "satisfaction_rating",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "client_company_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "reported_by_name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "reported_by_email",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "closed_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/SupportTickets"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister support-tickets",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SupportTickets"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SupportTickets"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer support-tickets",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/support-tickets/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer support-tickets",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SupportTickets"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire support-tickets par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SupportTickets"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SupportTickets"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier support-tickets",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/support/sla-breached": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/support/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/support/stats": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/support/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/support/tickets": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/support/interfaces/http/handler.go",
        "x-avia-documented": false
      },
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/support/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/support/tickets/{id}": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/support/interfaces/http/handler.go",
        "x-avia-documented": false
      },
      "put": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/support/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/support/tickets/{id}/close": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/support/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/support/tickets/{id}/comments": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/support/interfaces/http/handler.go",
        "x-avia-documented": false
      },
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/support/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/support/tickets/{id}/escalate": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/support/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/support/tickets/{id}/rate": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/support/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/support/tickets/{id}/resolve": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/support/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/support/tickets/{id}/status": {
      "patch": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/support/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/system/health": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "cmd/business-service/main.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/technical-locations": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "code",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "parent_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "location_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "description",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "responsible",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "latitude",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "longitude",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "is_active",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/TechnicalLocations"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister technical-locations",
        "tags": [
          "interventions"
        ],
        "x-avia-documented": true,
        "x-avia-module": "interventions"
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TechnicalLocations"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TechnicalLocations"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer technical-locations",
        "tags": [
          "interventions"
        ],
        "x-avia-documented": true,
        "x-avia-module": "interventions"
      }
    },
    "/api/v1/technical-locations/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer technical-locations",
        "tags": [
          "interventions"
        ],
        "x-avia-documented": true,
        "x-avia-module": "interventions"
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TechnicalLocations"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire technical-locations par id",
        "tags": [
          "interventions"
        ],
        "x-avia-documented": true,
        "x-avia-module": "interventions"
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TechnicalLocations"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TechnicalLocations"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier technical-locations",
        "tags": [
          "interventions"
        ],
        "x-avia-documented": true,
        "x-avia-module": "interventions"
      }
    },
    "/api/v1/technical-studies": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "article_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "study_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "content",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "affair_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "responsible_name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "sales_order_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "locked_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "opportunity_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim1_value_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim2_value_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "dim_set",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/TechnicalStudies"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister technical-studies",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TechnicalStudies"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TechnicalStudies"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer technical-studies",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/technical-studies/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer technical-studies",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TechnicalStudies"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire technical-studies par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TechnicalStudies"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TechnicalStudies"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier technical-studies",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/tenant-settings": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "company_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "key",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "value",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "category",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/CompanySettings"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister tenant-settings",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CompanySettings"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CompanySettings"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer tenant-settings",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/tenant-settings/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer tenant-settings",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CompanySettings"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire tenant-settings par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CompanySettings"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CompanySettings"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier tenant-settings",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/tenant/subscription-plan": {
      "patch": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "cmd/business-service/main.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/time-tracking": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "employee_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "clock_in",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "clock_out",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "break_duration",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "total_hours",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "overtime_hours",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "manufacturing_order_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "operation_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "workstation_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "approved_by",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/TimeTracking"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister time-tracking",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TimeTracking"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TimeTracking"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer time-tracking",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/time-tracking/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer time-tracking",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TimeTracking"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire time-tracking par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TimeTracking"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TimeTracking"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier time-tracking",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/treasury/schedules": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "invoice_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "due_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "amount",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "paid_amount",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "payment_date",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "payment_method",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "reference",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "delivery_note_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "client_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "supplier_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "purchase_order_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/PaymentSchedules"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister treasury/schedules",
        "tags": [
          "treasury"
        ],
        "x-avia-documented": true,
        "x-avia-module": "treasury"
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PaymentSchedules"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaymentSchedules"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer treasury/schedules",
        "tags": [
          "treasury"
        ],
        "x-avia-documented": true,
        "x-avia-module": "treasury"
      }
    },
    "/api/v1/treasury/schedules/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer treasury/schedules",
        "tags": [
          "treasury"
        ],
        "x-avia-documented": true,
        "x-avia-module": "treasury"
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaymentSchedules"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire treasury/schedules par id",
        "tags": [
          "treasury"
        ],
        "x-avia-documented": true,
        "x-avia-module": "treasury"
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PaymentSchedules"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaymentSchedules"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier treasury/schedules",
        "tags": [
          "treasury"
        ],
        "x-avia-documented": true,
        "x-avia-module": "treasury"
      }
    },
    "/api/v1/unit-conversions": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "from_unit_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "to_unit_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "factor",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/UnitConversions"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister unit-conversions",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UnitConversions"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnitConversions"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer unit-conversions",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/unit-conversions/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer unit-conversions",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnitConversions"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire unit-conversions par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UnitConversions"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnitConversions"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier unit-conversions",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/user-permissions": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "user_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "permission",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "granted",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "module",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "can_read",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "can_create",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "can_update",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "can_delete",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "sub_module",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "flags",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/UserPermissions"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister user-permissions",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UserPermissions"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserPermissions"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer user-permissions",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/user-permissions/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer user-permissions",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserPermissions"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire user-permissions par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UserPermissions"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserPermissions"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier user-permissions",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/user-sessions": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "user_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "user_email",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "user_name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "started_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "ended_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "last_activity_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "ip_address",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "user_agent",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "page_views",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "actions_count",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/UserSessions"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister user-sessions",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UserSessions"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserSessions"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer user-sessions",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/user-sessions/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer user-sessions",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserSessions"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire user-sessions par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UserSessions"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserSessions"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier user-sessions",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/users": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "cmd/business-service/main.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/users/fcm-token": {
      "delete": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/notification/interfaces/http/handler.go",
        "x-avia-documented": false
      },
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/notification/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/users/{id}": {
      "delete": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "cmd/business-service/main.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/warehouse-locations": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/stock/interfaces/http/warehouse_lot_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/warehouse-locations/{warehouseId}": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/stock/interfaces/http/warehouse_lot_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/warehouse-stock": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "article_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "warehouse_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "quantity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "reserved_quantity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "available_quantity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "last_counted_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "last_movement_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "version",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/WarehouseStock"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister warehouse-stock",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WarehouseStock"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WarehouseStock"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer warehouse-stock",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/warehouse-stock/article/{articleId}/global": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/stock/interfaces/http/warehouse_lot_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/warehouse-stock/article/{articleId}/warehouse/{warehouseId}": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/stock/interfaces/http/warehouse_lot_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/warehouse-stock/availability/{articleId}": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/stock/interfaces/http/warehouse_lot_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/warehouse-stock/release": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/stock/interfaces/http/warehouse_lot_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/warehouse-stock/reserve": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/stock/interfaces/http/warehouse_lot_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/warehouse-stock/update": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/stock/interfaces/http/warehouse_lot_handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/warehouse-stock/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer warehouse-stock",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WarehouseStock"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire warehouse-stock par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WarehouseStock"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WarehouseStock"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier warehouse-stock",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/workflow-definitions": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "entity_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "steps",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "active",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "description",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "is_active",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "trigger_event",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "trigger_status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "condition_expr",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "initiator_roles",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "priority",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/WorkflowDefinitions"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister workflow-definitions",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WorkflowDefinitions"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkflowDefinitions"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer workflow-definitions",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/workflow-definitions/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer workflow-definitions",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkflowDefinitions"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire workflow-definitions par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WorkflowDefinitions"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkflowDefinitions"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier workflow-definitions",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/workflow-instances": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/workflow/interfaces/http/handler.go",
        "x-avia-documented": false
      },
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/workflow/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/workflow-instances/entity/{entityType}/{entityId}": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/workflow/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/workflow-instances/pending": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/workflow/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/workflow-instances/process-timeouts": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/workflow/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/workflow-instances/{id}": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/workflow/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/workflow-instances/{id}/approve": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/workflow/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/workflow-instances/{id}/delegate": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/workflow/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/workflow-instances/{id}/escalate": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/workflow/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/workflow-instances/{id}/history": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/workflow/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/workflow-instances/{id}/reject": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/workflow/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/workflow-instances/{id}/request-change": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/workflow/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/workflows": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "name",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "entity_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "steps",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "active",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "description",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "is_active",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "trigger_event",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "trigger_status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "condition_expr",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "initiator_roles",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "priority",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/WorkflowDefinitions"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister workflows",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WorkflowDefinitions"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkflowDefinitions"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer workflows",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/workflows/validate-condition": {
      "post": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/workflow/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/workflows/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer workflows",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkflowDefinitions"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire workflows par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WorkflowDefinitions"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkflowDefinitions"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier workflows",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/workflows/{id}/steps": {
      "get": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/workflow/interfaces/http/handler.go",
        "x-avia-documented": false
      },
      "put": {
        "responses": {
          "200": {
            "description": "Reponse non documentee — route sans schema genere (walker, docs/PLAN_API_PUBLIQUE.md § 2.1)."
          }
        },
        "summary": "internal/workflow/interfaces/http/handler.go",
        "x-avia-documented": false
      }
    },
    "/api/v1/workstation-competencies": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "workstation_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "competency_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "niveau_min",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/WorkstationCompetencies"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister workstation-competencies",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WorkstationCompetencies"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkstationCompetencies"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer workstation-competencies",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/workstation-competencies/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer workstation-competencies",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkstationCompetencies"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire workstation-competencies par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WorkstationCompetencies"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkstationCompetencies"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier workstation-competencies",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/workstation-logs": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "workstation_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "event_type",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "description",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "duration_minutes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "operator_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/WorkstationLogs"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister workstation-logs",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WorkstationLogs"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkstationLogs"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer workstation-logs",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/workstation-logs/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer workstation-logs",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkstationLogs"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire workstation-logs par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WorkstationLogs"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkstationLogs"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier workstation-logs",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/workstation-operators": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "workstation_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "employee_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "skill_level",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "assigned_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "is_primary",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/WorkstationOperators"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister workstation-operators",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WorkstationOperators"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkstationOperators"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer workstation-operators",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/workstation-operators/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer workstation-operators",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkstationOperators"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire workstation-operators par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WorkstationOperators"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkstationOperators"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier workstation-operators",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/workstation-sessions": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "default": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Alias : limit. Maximum 2000, defaut 100.",
            "in": "query",
            "name": "page_size",
            "schema": {
              "default": 100,
              "maximum": 2000,
              "type": "integer"
            }
          },
          {
            "description": "colonne.asc ou colonne.desc",
            "in": "query",
            "name": "order",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "workstation_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "employee_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "manufacturing_order_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "operation_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "start_time",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "end_time",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "break_start",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "break_end",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "total_break_minutes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "status",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "produced_quantity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "defect_quantity",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "notes",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "synced",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "local_id",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "created_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          },
          {
            "description": "Filtre PostgREST-style : eq./neq./gt./gte./lt./lte./like./ilike./in.(a,b) — sinon egalite.",
            "in": "query",
            "name": "updated_at",
            "schema": {
              "pattern": "^(eq|neq|gt|gte|lt|lte|like|ilike|in)\\..+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/WorkstationSessions"
                      },
                      "type": "array"
                    },
                    "meta": {
                      "properties": {
                        "total": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Page de resultats."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lister workstation-sessions",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WorkstationSessions"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkstationSessions"
                }
              }
            },
            "description": "Ressource creee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Creer workstation-sessions",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    },
    "/api/v1/workstation-sessions/{id}": {
      "delete": {
        "description": "Un document deja valide n'est jamais supprime, il est archive (couche-metier § 2, invariant 6) — la suppression peut donc etre refusee selon le statut courant.",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Supprime."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          }
        },
        "summary": "Supprimer workstation-sessions",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkstationSessions"
                }
              }
            },
            "description": "Ressource."
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "summary": "Lire workstation-sessions par id",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WorkstationSessions"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkstationSessions"
                }
              }
            },
            "description": "Ressource modifiee."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/Unprocessable"
          }
        },
        "summary": "Modifier workstation-sessions",
        "tags": [
          "socle"
        ],
        "x-avia-documented": true
      }
    }
  },
  "security": [
    {
      "bearerAuth": []
    },
    {
      "apiKeyAuth": []
    }
  ],
  "servers": [
    {
      "description": "Prefixe de toutes les routes documentees ici (le champ path inclut deja /api/v1).",
      "url": "/api/v1"
    }
  ],
  "webhooks": {
    "consumption_voucher.approved": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "event": {
                    "enum": [
                      "consumption_voucher.approved"
                    ],
                    "type": "string"
                  },
                  "tenant_id": {
                    "type": "string"
                  }
                },
                "required": [
                  "event",
                  "tenant_id"
                ],
                "type": "object"
              }
            }
          },
          "description": "Charge POSTee par AVIA ERP a l'URL de l'abonnement. En-tetes : X-Avia-Event, X-Avia-Delivery-Id, X-Avia-Timestamp, X-Avia-Signature (HMAC-SHA256 sur \"\u003ctimestamp\u003e.\u003ccorps\u003e\", eventuellement deux valeurs separees par une virgule pendant une fenetre de rotation de secret), X-Avia-Webhook-Version."
        },
        "responses": {
          "200": {
            "description": "Accuse de reception. Tout code hors 2xx declenche une nouvelle tentative (backoff, docs/PLAN_API_PUBLIQUE.md § 2.4)."
          }
        },
        "summary": "Un bon de consommation est approuve.",
        "tags": [
          "webhooks"
        ]
      }
    },
    "consumption_voucher.submitted": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "event": {
                    "enum": [
                      "consumption_voucher.submitted"
                    ],
                    "type": "string"
                  },
                  "tenant_id": {
                    "type": "string"
                  }
                },
                "required": [
                  "event",
                  "tenant_id"
                ],
                "type": "object"
              }
            }
          },
          "description": "Charge POSTee par AVIA ERP a l'URL de l'abonnement. En-tetes : X-Avia-Event, X-Avia-Delivery-Id, X-Avia-Timestamp, X-Avia-Signature (HMAC-SHA256 sur \"\u003ctimestamp\u003e.\u003ccorps\u003e\", eventuellement deux valeurs separees par une virgule pendant une fenetre de rotation de secret), X-Avia-Webhook-Version."
        },
        "responses": {
          "200": {
            "description": "Accuse de reception. Tout code hors 2xx declenche une nouvelle tentative (backoff, docs/PLAN_API_PUBLIQUE.md § 2.4)."
          }
        },
        "summary": "Un bon de consommation est soumis a approbation.",
        "tags": [
          "webhooks"
        ]
      }
    },
    "credit_note.created": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "event": {
                    "enum": [
                      "credit_note.created"
                    ],
                    "type": "string"
                  },
                  "tenant_id": {
                    "type": "string"
                  }
                },
                "required": [
                  "event",
                  "tenant_id"
                ],
                "type": "object"
              }
            }
          },
          "description": "Charge POSTee par AVIA ERP a l'URL de l'abonnement. En-tetes : X-Avia-Event, X-Avia-Delivery-Id, X-Avia-Timestamp, X-Avia-Signature (HMAC-SHA256 sur \"\u003ctimestamp\u003e.\u003ccorps\u003e\", eventuellement deux valeurs separees par une virgule pendant une fenetre de rotation de secret), X-Avia-Webhook-Version."
        },
        "responses": {
          "200": {
            "description": "Accuse de reception. Tout code hors 2xx declenche une nouvelle tentative (backoff, docs/PLAN_API_PUBLIQUE.md § 2.4)."
          }
        },
        "summary": "Un avoir est cree.",
        "tags": [
          "webhooks"
        ]
      }
    },
    "delivery_note.created": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "event": {
                    "enum": [
                      "delivery_note.created"
                    ],
                    "type": "string"
                  },
                  "tenant_id": {
                    "type": "string"
                  }
                },
                "required": [
                  "event",
                  "tenant_id"
                ],
                "type": "object"
              }
            }
          },
          "description": "Charge POSTee par AVIA ERP a l'URL de l'abonnement. En-tetes : X-Avia-Event, X-Avia-Delivery-Id, X-Avia-Timestamp, X-Avia-Signature (HMAC-SHA256 sur \"\u003ctimestamp\u003e.\u003ccorps\u003e\", eventuellement deux valeurs separees par une virgule pendant une fenetre de rotation de secret), X-Avia-Webhook-Version."
        },
        "responses": {
          "200": {
            "description": "Accuse de reception. Tout code hors 2xx declenche une nouvelle tentative (backoff, docs/PLAN_API_PUBLIQUE.md § 2.4)."
          }
        },
        "summary": "Un bon de livraison est cree.",
        "tags": [
          "webhooks"
        ]
      }
    },
    "delivery_note.status_changed": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "event": {
                    "enum": [
                      "delivery_note.status_changed"
                    ],
                    "type": "string"
                  },
                  "tenant_id": {
                    "type": "string"
                  }
                },
                "required": [
                  "event",
                  "tenant_id"
                ],
                "type": "object"
              }
            }
          },
          "description": "Charge POSTee par AVIA ERP a l'URL de l'abonnement. En-tetes : X-Avia-Event, X-Avia-Delivery-Id, X-Avia-Timestamp, X-Avia-Signature (HMAC-SHA256 sur \"\u003ctimestamp\u003e.\u003ccorps\u003e\", eventuellement deux valeurs separees par une virgule pendant une fenetre de rotation de secret), X-Avia-Webhook-Version."
        },
        "responses": {
          "200": {
            "description": "Accuse de reception. Tout code hors 2xx declenche une nouvelle tentative (backoff, docs/PLAN_API_PUBLIQUE.md § 2.4)."
          }
        },
        "summary": "Le statut d'un bon de livraison change.",
        "tags": [
          "webhooks"
        ]
      }
    },
    "invoice.created": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "event": {
                    "enum": [
                      "invoice.created"
                    ],
                    "type": "string"
                  },
                  "tenant_id": {
                    "type": "string"
                  }
                },
                "required": [
                  "event",
                  "tenant_id"
                ],
                "type": "object"
              }
            }
          },
          "description": "Charge POSTee par AVIA ERP a l'URL de l'abonnement. En-tetes : X-Avia-Event, X-Avia-Delivery-Id, X-Avia-Timestamp, X-Avia-Signature (HMAC-SHA256 sur \"\u003ctimestamp\u003e.\u003ccorps\u003e\", eventuellement deux valeurs separees par une virgule pendant une fenetre de rotation de secret), X-Avia-Webhook-Version."
        },
        "responses": {
          "200": {
            "description": "Accuse de reception. Tout code hors 2xx declenche une nouvelle tentative (backoff, docs/PLAN_API_PUBLIQUE.md § 2.4)."
          }
        },
        "summary": "Une facture est creee.",
        "tags": [
          "webhooks"
        ]
      }
    },
    "invoice.status_changed": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "event": {
                    "enum": [
                      "invoice.status_changed"
                    ],
                    "type": "string"
                  },
                  "tenant_id": {
                    "type": "string"
                  }
                },
                "required": [
                  "event",
                  "tenant_id"
                ],
                "type": "object"
              }
            }
          },
          "description": "Charge POSTee par AVIA ERP a l'URL de l'abonnement. En-tetes : X-Avia-Event, X-Avia-Delivery-Id, X-Avia-Timestamp, X-Avia-Signature (HMAC-SHA256 sur \"\u003ctimestamp\u003e.\u003ccorps\u003e\", eventuellement deux valeurs separees par une virgule pendant une fenetre de rotation de secret), X-Avia-Webhook-Version."
        },
        "responses": {
          "200": {
            "description": "Accuse de reception. Tout code hors 2xx declenche une nouvelle tentative (backoff, docs/PLAN_API_PUBLIQUE.md § 2.4)."
          }
        },
        "summary": "Le statut d'une facture change.",
        "tags": [
          "webhooks"
        ]
      }
    },
    "manufacturing_order.created": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "event": {
                    "enum": [
                      "manufacturing_order.created"
                    ],
                    "type": "string"
                  },
                  "tenant_id": {
                    "type": "string"
                  }
                },
                "required": [
                  "event",
                  "tenant_id"
                ],
                "type": "object"
              }
            }
          },
          "description": "Charge POSTee par AVIA ERP a l'URL de l'abonnement. En-tetes : X-Avia-Event, X-Avia-Delivery-Id, X-Avia-Timestamp, X-Avia-Signature (HMAC-SHA256 sur \"\u003ctimestamp\u003e.\u003ccorps\u003e\", eventuellement deux valeurs separees par une virgule pendant une fenetre de rotation de secret), X-Avia-Webhook-Version."
        },
        "responses": {
          "200": {
            "description": "Accuse de reception. Tout code hors 2xx declenche une nouvelle tentative (backoff, docs/PLAN_API_PUBLIQUE.md § 2.4)."
          }
        },
        "summary": "Un ordre de fabrication est cree.",
        "tags": [
          "webhooks"
        ]
      }
    },
    "mo.completed": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "event": {
                    "enum": [
                      "mo.completed"
                    ],
                    "type": "string"
                  },
                  "tenant_id": {
                    "type": "string"
                  }
                },
                "required": [
                  "event",
                  "tenant_id"
                ],
                "type": "object"
              }
            }
          },
          "description": "Charge POSTee par AVIA ERP a l'URL de l'abonnement. En-tetes : X-Avia-Event, X-Avia-Delivery-Id, X-Avia-Timestamp, X-Avia-Signature (HMAC-SHA256 sur \"\u003ctimestamp\u003e.\u003ccorps\u003e\", eventuellement deux valeurs separees par une virgule pendant une fenetre de rotation de secret), X-Avia-Webhook-Version."
        },
        "responses": {
          "200": {
            "description": "Accuse de reception. Tout code hors 2xx declenche une nouvelle tentative (backoff, docs/PLAN_API_PUBLIQUE.md § 2.4)."
          }
        },
        "summary": "Un ordre de fabrication est termine.",
        "tags": [
          "webhooks"
        ]
      }
    },
    "mo.status_changed": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "event": {
                    "enum": [
                      "mo.status_changed"
                    ],
                    "type": "string"
                  },
                  "tenant_id": {
                    "type": "string"
                  }
                },
                "required": [
                  "event",
                  "tenant_id"
                ],
                "type": "object"
              }
            }
          },
          "description": "Charge POSTee par AVIA ERP a l'URL de l'abonnement. En-tetes : X-Avia-Event, X-Avia-Delivery-Id, X-Avia-Timestamp, X-Avia-Signature (HMAC-SHA256 sur \"\u003ctimestamp\u003e.\u003ccorps\u003e\", eventuellement deux valeurs separees par une virgule pendant une fenetre de rotation de secret), X-Avia-Webhook-Version."
        },
        "responses": {
          "200": {
            "description": "Accuse de reception. Tout code hors 2xx declenche une nouvelle tentative (backoff, docs/PLAN_API_PUBLIQUE.md § 2.4)."
          }
        },
        "summary": "Le statut d'un ordre de fabrication change (hors terminaison, voir mo.completed).",
        "tags": [
          "webhooks"
        ]
      }
    },
    "non_conformity.opened": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "event": {
                    "enum": [
                      "non_conformity.opened"
                    ],
                    "type": "string"
                  },
                  "tenant_id": {
                    "type": "string"
                  }
                },
                "required": [
                  "event",
                  "tenant_id"
                ],
                "type": "object"
              }
            }
          },
          "description": "Charge POSTee par AVIA ERP a l'URL de l'abonnement. En-tetes : X-Avia-Event, X-Avia-Delivery-Id, X-Avia-Timestamp, X-Avia-Signature (HMAC-SHA256 sur \"\u003ctimestamp\u003e.\u003ccorps\u003e\", eventuellement deux valeurs separees par une virgule pendant une fenetre de rotation de secret), X-Avia-Webhook-Version."
        },
        "responses": {
          "200": {
            "description": "Accuse de reception. Tout code hors 2xx declenche une nouvelle tentative (backoff, docs/PLAN_API_PUBLIQUE.md § 2.4)."
          }
        },
        "summary": "Une non-conformite est ouverte ou reste active.",
        "tags": [
          "webhooks"
        ]
      }
    },
    "payment.received": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "event": {
                    "enum": [
                      "payment.received"
                    ],
                    "type": "string"
                  },
                  "tenant_id": {
                    "type": "string"
                  }
                },
                "required": [
                  "event",
                  "tenant_id"
                ],
                "type": "object"
              }
            }
          },
          "description": "Charge POSTee par AVIA ERP a l'URL de l'abonnement. En-tetes : X-Avia-Event, X-Avia-Delivery-Id, X-Avia-Timestamp, X-Avia-Signature (HMAC-SHA256 sur \"\u003ctimestamp\u003e.\u003ccorps\u003e\", eventuellement deux valeurs separees par une virgule pendant une fenetre de rotation de secret), X-Avia-Webhook-Version."
        },
        "responses": {
          "200": {
            "description": "Accuse de reception. Tout code hors 2xx declenche une nouvelle tentative (backoff, docs/PLAN_API_PUBLIQUE.md § 2.4)."
          }
        },
        "summary": "Un encaissement client est enregistre.",
        "tags": [
          "webhooks"
        ]
      }
    },
    "purchase_order.created": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "event": {
                    "enum": [
                      "purchase_order.created"
                    ],
                    "type": "string"
                  },
                  "tenant_id": {
                    "type": "string"
                  }
                },
                "required": [
                  "event",
                  "tenant_id"
                ],
                "type": "object"
              }
            }
          },
          "description": "Charge POSTee par AVIA ERP a l'URL de l'abonnement. En-tetes : X-Avia-Event, X-Avia-Delivery-Id, X-Avia-Timestamp, X-Avia-Signature (HMAC-SHA256 sur \"\u003ctimestamp\u003e.\u003ccorps\u003e\", eventuellement deux valeurs separees par une virgule pendant une fenetre de rotation de secret), X-Avia-Webhook-Version."
        },
        "responses": {
          "200": {
            "description": "Accuse de reception. Tout code hors 2xx declenche une nouvelle tentative (backoff, docs/PLAN_API_PUBLIQUE.md § 2.4)."
          }
        },
        "summary": "Un bon de commande fournisseur est cree.",
        "tags": [
          "webhooks"
        ]
      }
    },
    "purchase_order.status_changed": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "event": {
                    "enum": [
                      "purchase_order.status_changed"
                    ],
                    "type": "string"
                  },
                  "tenant_id": {
                    "type": "string"
                  }
                },
                "required": [
                  "event",
                  "tenant_id"
                ],
                "type": "object"
              }
            }
          },
          "description": "Charge POSTee par AVIA ERP a l'URL de l'abonnement. En-tetes : X-Avia-Event, X-Avia-Delivery-Id, X-Avia-Timestamp, X-Avia-Signature (HMAC-SHA256 sur \"\u003ctimestamp\u003e.\u003ccorps\u003e\", eventuellement deux valeurs separees par une virgule pendant une fenetre de rotation de secret), X-Avia-Webhook-Version."
        },
        "responses": {
          "200": {
            "description": "Accuse de reception. Tout code hors 2xx declenche une nouvelle tentative (backoff, docs/PLAN_API_PUBLIQUE.md § 2.4)."
          }
        },
        "summary": "Le statut d'un bon de commande fournisseur change.",
        "tags": [
          "webhooks"
        ]
      }
    },
    "purchase_request.approved": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "event": {
                    "enum": [
                      "purchase_request.approved"
                    ],
                    "type": "string"
                  },
                  "tenant_id": {
                    "type": "string"
                  }
                },
                "required": [
                  "event",
                  "tenant_id"
                ],
                "type": "object"
              }
            }
          },
          "description": "Charge POSTee par AVIA ERP a l'URL de l'abonnement. En-tetes : X-Avia-Event, X-Avia-Delivery-Id, X-Avia-Timestamp, X-Avia-Signature (HMAC-SHA256 sur \"\u003ctimestamp\u003e.\u003ccorps\u003e\", eventuellement deux valeurs separees par une virgule pendant une fenetre de rotation de secret), X-Avia-Webhook-Version."
        },
        "responses": {
          "200": {
            "description": "Accuse de reception. Tout code hors 2xx declenche une nouvelle tentative (backoff, docs/PLAN_API_PUBLIQUE.md § 2.4)."
          }
        },
        "summary": "Une demande d'achat est approuvee.",
        "tags": [
          "webhooks"
        ]
      }
    },
    "purchase_request.rejected": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "event": {
                    "enum": [
                      "purchase_request.rejected"
                    ],
                    "type": "string"
                  },
                  "tenant_id": {
                    "type": "string"
                  }
                },
                "required": [
                  "event",
                  "tenant_id"
                ],
                "type": "object"
              }
            }
          },
          "description": "Charge POSTee par AVIA ERP a l'URL de l'abonnement. En-tetes : X-Avia-Event, X-Avia-Delivery-Id, X-Avia-Timestamp, X-Avia-Signature (HMAC-SHA256 sur \"\u003ctimestamp\u003e.\u003ccorps\u003e\", eventuellement deux valeurs separees par une virgule pendant une fenetre de rotation de secret), X-Avia-Webhook-Version."
        },
        "responses": {
          "200": {
            "description": "Accuse de reception. Tout code hors 2xx declenche une nouvelle tentative (backoff, docs/PLAN_API_PUBLIQUE.md § 2.4)."
          }
        },
        "summary": "Une demande d'achat est rejetee.",
        "tags": [
          "webhooks"
        ]
      }
    },
    "purchase_request.submitted": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "event": {
                    "enum": [
                      "purchase_request.submitted"
                    ],
                    "type": "string"
                  },
                  "tenant_id": {
                    "type": "string"
                  }
                },
                "required": [
                  "event",
                  "tenant_id"
                ],
                "type": "object"
              }
            }
          },
          "description": "Charge POSTee par AVIA ERP a l'URL de l'abonnement. En-tetes : X-Avia-Event, X-Avia-Delivery-Id, X-Avia-Timestamp, X-Avia-Signature (HMAC-SHA256 sur \"\u003ctimestamp\u003e.\u003ccorps\u003e\", eventuellement deux valeurs separees par une virgule pendant une fenetre de rotation de secret), X-Avia-Webhook-Version."
        },
        "responses": {
          "200": {
            "description": "Accuse de reception. Tout code hors 2xx declenche une nouvelle tentative (backoff, docs/PLAN_API_PUBLIQUE.md § 2.4)."
          }
        },
        "summary": "Une demande d'achat est soumise a approbation.",
        "tags": [
          "webhooks"
        ]
      }
    },
    "quote.created": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "event": {
                    "enum": [
                      "quote.created"
                    ],
                    "type": "string"
                  },
                  "tenant_id": {
                    "type": "string"
                  }
                },
                "required": [
                  "event",
                  "tenant_id"
                ],
                "type": "object"
              }
            }
          },
          "description": "Charge POSTee par AVIA ERP a l'URL de l'abonnement. En-tetes : X-Avia-Event, X-Avia-Delivery-Id, X-Avia-Timestamp, X-Avia-Signature (HMAC-SHA256 sur \"\u003ctimestamp\u003e.\u003ccorps\u003e\", eventuellement deux valeurs separees par une virgule pendant une fenetre de rotation de secret), X-Avia-Webhook-Version."
        },
        "responses": {
          "200": {
            "description": "Accuse de reception. Tout code hors 2xx declenche une nouvelle tentative (backoff, docs/PLAN_API_PUBLIQUE.md § 2.4)."
          }
        },
        "summary": "Un devis est cree.",
        "tags": [
          "webhooks"
        ]
      }
    },
    "quote.status_changed": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "event": {
                    "enum": [
                      "quote.status_changed"
                    ],
                    "type": "string"
                  },
                  "tenant_id": {
                    "type": "string"
                  }
                },
                "required": [
                  "event",
                  "tenant_id"
                ],
                "type": "object"
              }
            }
          },
          "description": "Charge POSTee par AVIA ERP a l'URL de l'abonnement. En-tetes : X-Avia-Event, X-Avia-Delivery-Id, X-Avia-Timestamp, X-Avia-Signature (HMAC-SHA256 sur \"\u003ctimestamp\u003e.\u003ccorps\u003e\", eventuellement deux valeurs separees par une virgule pendant une fenetre de rotation de secret), X-Avia-Webhook-Version."
        },
        "responses": {
          "200": {
            "description": "Accuse de reception. Tout code hors 2xx declenche une nouvelle tentative (backoff, docs/PLAN_API_PUBLIQUE.md § 2.4)."
          }
        },
        "summary": "Le statut d'un devis change.",
        "tags": [
          "webhooks"
        ]
      }
    },
    "reception.created": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "event": {
                    "enum": [
                      "reception.created"
                    ],
                    "type": "string"
                  },
                  "tenant_id": {
                    "type": "string"
                  }
                },
                "required": [
                  "event",
                  "tenant_id"
                ],
                "type": "object"
              }
            }
          },
          "description": "Charge POSTee par AVIA ERP a l'URL de l'abonnement. En-tetes : X-Avia-Event, X-Avia-Delivery-Id, X-Avia-Timestamp, X-Avia-Signature (HMAC-SHA256 sur \"\u003ctimestamp\u003e.\u003ccorps\u003e\", eventuellement deux valeurs separees par une virgule pendant une fenetre de rotation de secret), X-Avia-Webhook-Version."
        },
        "responses": {
          "200": {
            "description": "Accuse de reception. Tout code hors 2xx declenche une nouvelle tentative (backoff, docs/PLAN_API_PUBLIQUE.md § 2.4)."
          }
        },
        "summary": "Une reception fournisseur est creee.",
        "tags": [
          "webhooks"
        ]
      }
    },
    "reception.validated": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "event": {
                    "enum": [
                      "reception.validated"
                    ],
                    "type": "string"
                  },
                  "tenant_id": {
                    "type": "string"
                  }
                },
                "required": [
                  "event",
                  "tenant_id"
                ],
                "type": "object"
              }
            }
          },
          "description": "Charge POSTee par AVIA ERP a l'URL de l'abonnement. En-tetes : X-Avia-Event, X-Avia-Delivery-Id, X-Avia-Timestamp, X-Avia-Signature (HMAC-SHA256 sur \"\u003ctimestamp\u003e.\u003ccorps\u003e\", eventuellement deux valeurs separees par une virgule pendant une fenetre de rotation de secret), X-Avia-Webhook-Version."
        },
        "responses": {
          "200": {
            "description": "Accuse de reception. Tout code hors 2xx declenche une nouvelle tentative (backoff, docs/PLAN_API_PUBLIQUE.md § 2.4)."
          }
        },
        "summary": "Une reception est validee (matiere disponible).",
        "tags": [
          "webhooks"
        ]
      }
    },
    "sales_order.created": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "event": {
                    "enum": [
                      "sales_order.created"
                    ],
                    "type": "string"
                  },
                  "tenant_id": {
                    "type": "string"
                  }
                },
                "required": [
                  "event",
                  "tenant_id"
                ],
                "type": "object"
              }
            }
          },
          "description": "Charge POSTee par AVIA ERP a l'URL de l'abonnement. En-tetes : X-Avia-Event, X-Avia-Delivery-Id, X-Avia-Timestamp, X-Avia-Signature (HMAC-SHA256 sur \"\u003ctimestamp\u003e.\u003ccorps\u003e\", eventuellement deux valeurs separees par une virgule pendant une fenetre de rotation de secret), X-Avia-Webhook-Version."
        },
        "responses": {
          "200": {
            "description": "Accuse de reception. Tout code hors 2xx declenche une nouvelle tentative (backoff, docs/PLAN_API_PUBLIQUE.md § 2.4)."
          }
        },
        "summary": "Une commande client est creee (CRUD generique ou conversion depuis un devis).",
        "tags": [
          "webhooks"
        ]
      }
    },
    "sales_order.status_changed": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "event": {
                    "enum": [
                      "sales_order.status_changed"
                    ],
                    "type": "string"
                  },
                  "tenant_id": {
                    "type": "string"
                  }
                },
                "required": [
                  "event",
                  "tenant_id"
                ],
                "type": "object"
              }
            }
          },
          "description": "Charge POSTee par AVIA ERP a l'URL de l'abonnement. En-tetes : X-Avia-Event, X-Avia-Delivery-Id, X-Avia-Timestamp, X-Avia-Signature (HMAC-SHA256 sur \"\u003ctimestamp\u003e.\u003ccorps\u003e\", eventuellement deux valeurs separees par une virgule pendant une fenetre de rotation de secret), X-Avia-Webhook-Version."
        },
        "responses": {
          "200": {
            "description": "Accuse de reception. Tout code hors 2xx declenche une nouvelle tentative (backoff, docs/PLAN_API_PUBLIQUE.md § 2.4)."
          }
        },
        "summary": "Le statut d'une commande client change.",
        "tags": [
          "webhooks"
        ]
      }
    },
    "stock.low": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "event": {
                    "enum": [
                      "stock.low"
                    ],
                    "type": "string"
                  },
                  "tenant_id": {
                    "type": "string"
                  }
                },
                "required": [
                  "event",
                  "tenant_id"
                ],
                "type": "object"
              }
            }
          },
          "description": "Charge POSTee par AVIA ERP a l'URL de l'abonnement. En-tetes : X-Avia-Event, X-Avia-Delivery-Id, X-Avia-Timestamp, X-Avia-Signature (HMAC-SHA256 sur \"\u003ctimestamp\u003e.\u003ccorps\u003e\", eventuellement deux valeurs separees par une virgule pendant une fenetre de rotation de secret), X-Avia-Webhook-Version."
        },
        "responses": {
          "200": {
            "description": "Accuse de reception. Tout code hors 2xx declenche une nouvelle tentative (backoff, docs/PLAN_API_PUBLIQUE.md § 2.4)."
          }
        },
        "summary": "Le stock d'un article passe sous son minimum.",
        "tags": [
          "webhooks"
        ]
      }
    },
    "supplier_invoice.created": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "event": {
                    "enum": [
                      "supplier_invoice.created"
                    ],
                    "type": "string"
                  },
                  "tenant_id": {
                    "type": "string"
                  }
                },
                "required": [
                  "event",
                  "tenant_id"
                ],
                "type": "object"
              }
            }
          },
          "description": "Charge POSTee par AVIA ERP a l'URL de l'abonnement. En-tetes : X-Avia-Event, X-Avia-Delivery-Id, X-Avia-Timestamp, X-Avia-Signature (HMAC-SHA256 sur \"\u003ctimestamp\u003e.\u003ccorps\u003e\", eventuellement deux valeurs separees par une virgule pendant une fenetre de rotation de secret), X-Avia-Webhook-Version."
        },
        "responses": {
          "200": {
            "description": "Accuse de reception. Tout code hors 2xx declenche une nouvelle tentative (backoff, docs/PLAN_API_PUBLIQUE.md § 2.4)."
          }
        },
        "summary": "Une facture fournisseur est enregistree.",
        "tags": [
          "webhooks"
        ]
      }
    },
    "supplier_payment.made": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "event": {
                    "enum": [
                      "supplier_payment.made"
                    ],
                    "type": "string"
                  },
                  "tenant_id": {
                    "type": "string"
                  }
                },
                "required": [
                  "event",
                  "tenant_id"
                ],
                "type": "object"
              }
            }
          },
          "description": "Charge POSTee par AVIA ERP a l'URL de l'abonnement. En-tetes : X-Avia-Event, X-Avia-Delivery-Id, X-Avia-Timestamp, X-Avia-Signature (HMAC-SHA256 sur \"\u003ctimestamp\u003e.\u003ccorps\u003e\", eventuellement deux valeurs separees par une virgule pendant une fenetre de rotation de secret), X-Avia-Webhook-Version."
        },
        "responses": {
          "200": {
            "description": "Accuse de reception. Tout code hors 2xx declenche une nouvelle tentative (backoff, docs/PLAN_API_PUBLIQUE.md § 2.4)."
          }
        },
        "summary": "Un decaissement fournisseur est enregistre.",
        "tags": [
          "webhooks"
        ]
      }
    },
    "workstation.status_changed": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "event": {
                    "enum": [
                      "workstation.status_changed"
                    ],
                    "type": "string"
                  },
                  "tenant_id": {
                    "type": "string"
                  }
                },
                "required": [
                  "event",
                  "tenant_id"
                ],
                "type": "object"
              }
            }
          },
          "description": "Charge POSTee par AVIA ERP a l'URL de l'abonnement. En-tetes : X-Avia-Event, X-Avia-Delivery-Id, X-Avia-Timestamp, X-Avia-Signature (HMAC-SHA256 sur \"\u003ctimestamp\u003e.\u003ccorps\u003e\", eventuellement deux valeurs separees par une virgule pendant une fenetre de rotation de secret), X-Avia-Webhook-Version."
        },
        "responses": {
          "200": {
            "description": "Accuse de reception. Tout code hors 2xx declenche une nouvelle tentative (backoff, docs/PLAN_API_PUBLIQUE.md § 2.4)."
          }
        },
        "summary": "Un poste de production change d'etat (panne, arret, blocage).",
        "tags": [
          "webhooks"
        ]
      }
    }
  }
}
