{
    "nombre": "La Frutología — Plataforma de Gestión Logística Operativa",
    "ref": "REQ-2026-0312",
    "version": "API 2.7 (capa REST mínima sobre la capa de dominio)",
    "nota": "Las operaciones con datos requieren una base de datos MySQL configurada (ver README). Las mutaciones aceptan la cabecera X-Usuario-Id (1 por defecto).",
    "endpoints": [
        "GET  /api/health",
        "GET  /api/clientes                          (query: estado, prioridad, buscar, incluir_eliminados, pagina, por_pagina)",
        "GET  /api/clientes/{id}",
        "POST /api/clientes",
        "PUT  /api/clientes/{id}",
        "DELETE /api/clientes/{id}",
        "POST /api/clientes/{id}/direcciones",
        "GET  /api/pedidos                           (query: id_cliente, estado, tipo_pedido, fecha_despacho, fecha_desde, fecha_hasta, incluir_cancelados, pagina, por_pagina)",
        "GET  /api/pedidos/{id}",
        "POST /api/pedidos",
        "POST /api/pedidos/{id}/lineas",
        "POST /api/pedidos/{id}/estado               (body: {estado})",
        "POST /api/pedidos/{id}/cancelar",
        "POST /api/pedidos/{id}/facturaciones        (body: {facturaciones:[{rut_pagador,monto,porcentaje?}]})",
        "GET  /api/rutas-base                        (query: dia_semana, incluir_eliminadas)",
        "GET  /api/rutas-base/{id}",
        "POST /api/rutas-base                        (body: {nombre_ruta, dia_semana, descripcion?})",
        "GET  /api/rutas-diarias                     (query: estado, id_ruta_base, id_cliente, fecha_despacho, fecha_desde, fecha_hasta, incluir_canceladas, pagina, por_pagina)",
        "GET  /api/rutas-diarias/{id}",
        "POST /api/rutas-diarias                     (body: {id_ruta_base, fecha_despacho, heredar_paradas?})",
        "POST /api/rutas-diarias/{id}/paradas        (body: {id_cliente, id_direccion, orden_parada, cantidad_cajas})",
        "POST /api/rutas-diarias/{id}/planificar",
        "POST /api/rutas-diarias/{id}/aprobar        (body: {id_lider})",
        "POST /api/rutas-diarias/{id}/cancelar",
        "POST /api/rutas-diarias/{id}/reordenar-paradas (body: {paradas:[id1,id2,...]})",
        "GET  /api/rutas-diarias/{id}/consolidados",
        "POST /api/rutas-diarias/{id}/consolidados   (genera el consolidado de la ruta aprobada)",
        "GET  /api/rutas-diarias/{id}/etiquetas      (query: sin_diseno)",
        "POST /api/rutas-diarias/{id}/etiquetas      (genera las etiquetas de la ruta)",
        "POST /api/rutas-diarias/{id}/etiquetas/marcar-impresas",
        "GET  /api/consolidados/{id}",
        "GET  /api/consolidados/{id}/etiquetas",
        "GET  /api/paradas/{id}/consolidados",
        "GET  /api/etiquetas/{id}",
        "GET  /api/etiquetas/{id}/html               (devuelve text/html renderizado)",
        "POST /api/etiquetas/{id}/asignar-diseno     (body: {id_diseno})",
        "POST /api/etiquetas/{id}/marcar-impresa",
        "GET  /api/disenos-etiqueta                  (query: numero_ronda)",
        "GET  /api/disenos-etiqueta/aprobado",
        "GET  /api/disenos-etiqueta/{id}",
        "POST /api/disenos-etiqueta                  (body: {numero_ronda, html_template, datos_ejemplo})",
        "POST /api/disenos-etiqueta/{id}/aprobar",
        "POST /api/disenos-etiqueta/{id}/rechazar"
    ]
}