{"openapi":"3.1.0","info":{"title":"api-fito","summary":"API REST para el Registro Público de Productos Fitosanitarios del MAPA","description":"\n## Descripción\n\n**api-fito** expone como API REST el contenido del\n[Registro Oficial de Productos Fitosanitarios](https://servicio.mapa.gob.es/regfiweb)\ndel Ministerio de Agricultura, Pesca y Alimentación (MAPA) de España.\n\n## Fuente de datos\n\nLos datos provienen del portal MAPA `servicio.mapa.gob.es/regfiweb`, que publica:\n\n- Un **fichero JSON bulk** con todos los productos registrados, actualizado semanalmente\n  (viernes ~14:00 CET).\n- **Páginas HTML de detalle** para cada producto en `/Productos/DetalleProducto/{id}`.\n\nLa API implementa una estrategia de degradación elegante: intenta la exportación JSON\nprimero y recurre al scraping HTML si no está disponible.\n\n## Recursos disponibles\n\n| Recurso | Descripción |\n|---------|-------------|\n| `GET /api/v1/productos` | Listado y búsqueda de productos |\n| `GET /api/v1/productos/{id}` | Detalle completo de un producto |\n| `GET /api/v1/productos/{id}/formulados` | Formulados de un producto |\n| `GET /api/v1/sustancias` | Catálogo de sustancias activas |\n| `GET /api/v1/cultivos` | Catálogo de cultivos autorizados |\n| `GET /api/v1/plagas` | Catálogo de plagas y organismos nocivos |\n| `GET /api/v1/usos` | Búsqueda de usos (cultivo × plaga) |\n| `GET /api/v1/movimientos` | Movimientos del registro (altas/bajas) |\n\n## Notas\n\n- Los datos se actualizan automáticamente según `CACHE_EXPORT_TTL` (defecto: 6 horas).\n- Para forzar una sincronización: `fito-sync run`\n- Rate limiting: **60 req/min por IP** (configurable).\n","contact":{"name":"api-fito","url":"https://github.com/yourorg/api-fito"},"license":{"name":"MIT"},"version":"0.1.0"},"paths":{"/api/v1/productos":{"get":{"tags":["Productos"],"summary":"Listar y buscar productos fitosanitarios","description":"Devuelve un listado paginado de productos del Registro Oficial. Soporta búsqueda por nombre, número de registro, titular, fabricante, sustancia activa, cultivo, plaga, estado y fechas.","operationId":"listar_productos_api_v1_productos_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Búsqueda de texto libre","title":"Q"},"description":"Búsqueda de texto libre"},{"name":"nregistro","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Número de registro","title":"Nregistro"},"description":"Número de registro"},{"name":"nombre","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Nombre comercial (parcial)","title":"Nombre"},"description":"Nombre comercial (parcial)"},{"name":"titular","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Titular del registro (parcial)","title":"Titular"},"description":"Titular del registro (parcial)"},{"name":"fabricante","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Fabricante (parcial)","title":"Fabricante"},"description":"Fabricante (parcial)"},{"name":"sustancia","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sustancia activa (parcial)","title":"Sustancia"},"description":"Sustancia activa (parcial)"},{"name":"cultivo","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Cultivo autorizado (parcial)","title":"Cultivo"},"description":"Cultivo autorizado (parcial)"},{"name":"plaga","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Plaga objetivo (parcial)","title":"Plaga"},"description":"Plaga objetivo (parcial)"},{"name":"estado","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Estado del producto","title":"Estado"},"description":"Estado del producto"},{"name":"funcion","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Función (fungicida, herbicida...)","title":"Funcion"},"description":"Función (fungicida, herbicida...)"},{"name":"inscripcion_desde","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Inscripción desde (YYYY-MM-DD)","title":"Inscripcion Desde"},"description":"Inscripción desde (YYYY-MM-DD)"},{"name":"inscripcion_hasta","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Inscripción hasta (YYYY-MM-DD)","title":"Inscripcion Hasta"},"description":"Inscripción hasta (YYYY-MM-DD)"},{"name":"caducidad_desde","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Caducidad desde (YYYY-MM-DD)","title":"Caducidad Desde"},"description":"Caducidad desde (YYYY-MM-DD)"},{"name":"caducidad_hasta","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Caducidad hasta (YYYY-MM-DD)","title":"Caducidad Hasta"},"description":"Caducidad hasta (YYYY-MM-DD)"},{"name":"uso_no_profesional","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Filtrar por uso no profesional","title":"Uso No Profesional"},"description":"Filtrar por uso no profesional"},{"name":"orden","in":"query","required":false,"schema":{"$ref":"#/components/schemas/OrdenCampo","description":"Campo de ordenación","default":"numero_registro"},"description":"Campo de ordenación"},{"name":"dir","in":"query","required":false,"schema":{"$ref":"#/components/schemas/OrdenDireccion","description":"Dirección de ordenación","default":"asc"},"description":"Dirección de ordenación"},{"name":"pagina","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Número de página","default":1,"title":"Pagina"},"description":"Número de página"},{"name":"por_pagina","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Resultados por página","default":50,"title":"Por Pagina"},"description":"Resultados por página"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResultadoPaginado_ProductoResumen_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/productos/{id_registro}":{"get":{"tags":["Productos"],"summary":"Detalle completo de un producto","description":"Devuelve toda la información de un producto: formulados, sustancias activas, usos autorizados (cultivos × plagas), plazos de seguridad y metadatos.","operationId":"obtener_producto_api_v1_productos__id_registro__get","parameters":[{"name":"id_registro","in":"path","required":true,"schema":{"type":"string","title":"Id Registro"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductoDetalle"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/productos/{id_registro}/denominaciones":{"get":{"tags":["Productos"],"summary":"Denominaciones comunes (productos con el mismo nº de registro)","description":"Devuelve todas las denominaciones comerciales que comparten el mismo número de registro. Un mismo producto registrado puede ser comercializado por varias empresas con distintos nombres comerciales. Se acepta tanto el `id_registro` interno como el `numero_registro` oficial.","operationId":"denominaciones_de_producto_api_v1_productos__id_registro__denominaciones_get","parameters":[{"name":"id_registro","in":"path","required":true,"schema":{"type":"string","title":"Id Registro"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DenominacionGrupo"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/productos/{id_registro}/ficha.pdf":{"get":{"tags":["Productos"],"summary":"Descargar ficha PDF oficial del producto","description":"Descarga la ficha técnica oficial (PDF) del producto desde el portal MAPA. Incluye composición, usos autorizados, plazos de seguridad y condicionantes. Acepta tanto `id_registro` interno como `numero_registro` (con o sin prefijo `ES-`). El PDF se cachea 24 h.","operationId":"descargar_ficha_api_v1_productos__id_registro__ficha_pdf_get","parameters":[{"name":"id_registro","in":"path","required":true,"schema":{"type":"string","title":"Id Registro"}}],"responses":{"200":{"description":"Ficha técnica oficial del producto en formato PDF","content":{"application/pdf":{}}},"404":{"description":"Producto no encontrado"},"502":{"description":"Error accediendo al portal MAPA"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/productos/{id_registro}/ficha-datos":{"get":{"tags":["Productos"],"summary":"Datos parseados del PDF de ficha (composición, usos, plazos, etc.)","description":"Descarga la ficha PDF del producto y devuelve sus datos como JSON: composición, envases, usos autorizados, plazos de seguridad y clasificación de peligro. Los bloques se devuelven como texto plano (el PDF tiene un layout multi-columna que no se parsea fácilmente en tablas).","operationId":"datos_ficha_api_v1_productos__id_registro__ficha_datos_get","parameters":[{"name":"id_registro","in":"path","required":true,"schema":{"type":"string","title":"Id Registro"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Datos Ficha Api V1 Productos  Id Registro  Ficha Datos Get"}}}},"404":{"description":"Producto no encontrado"},"502":{"description":"Error accediendo al portal MAPA"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/productos/{id_registro}/formulados":{"get":{"tags":["Formulados"],"summary":"Formulados de un producto","description":"Devuelve los formulados registrados de un producto con su composición y usos.","operationId":"listar_formulados_api_v1_productos__id_registro__formulados_get","parameters":[{"name":"id_registro","in":"path","required":true,"schema":{"type":"string","title":"Id Registro"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Formulado"},"title":"Response Listar Formulados Api V1 Productos  Id Registro  Formulados Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/productos/{id_registro}/formulados/{numero_formulado}":{"get":{"tags":["Formulados"],"summary":"Detalle de un formulado","description":"Devuelve el detalle de un formulado concreto (composición, usos, envases).","operationId":"obtener_formulado_api_v1_productos__id_registro__formulados__numero_formulado__get","parameters":[{"name":"id_registro","in":"path","required":true,"schema":{"type":"string","title":"Id Registro"}},{"name":"numero_formulado","in":"path","required":true,"schema":{"type":"string","title":"Numero Formulado"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Formulado"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sustancias":{"get":{"tags":["Sustancias Activas"],"summary":"Listar sustancias activas","description":"Devuelve el catálogo de sustancias activas presentes en productos registrados, con soporte de búsqueda y paginación.","operationId":"listar_sustancias_api_v1_sustancias_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filtro por nombre (parcial)","title":"Q"},"description":"Filtro por nombre (parcial)"},{"name":"pagina","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Pagina"}},{"name":"por_pagina","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Por Pagina"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResultadoPaginado_str_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sustancias/{nombre}/productos":{"get":{"tags":["Sustancias Activas"],"summary":"Productos que contienen una sustancia activa","description":"Devuelve los productos que contienen la sustancia activa indicada.","operationId":"productos_por_sustancia_api_v1_sustancias__nombre__productos_get","parameters":[{"name":"nombre","in":"path","required":true,"schema":{"type":"string","title":"Nombre"}},{"name":"pagina","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Pagina"}},{"name":"por_pagina","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Por Pagina"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResultadoPaginado_dict_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/cultivos":{"get":{"tags":["Cultivos"],"summary":"Listar cultivos autorizados","description":"Catálogo de cultivos para los que existen productos registrados.","operationId":"listar_cultivos_api_v1_cultivos_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filtro por nombre de cultivo (parcial)","title":"Q"},"description":"Filtro por nombre de cultivo (parcial)"},{"name":"pagina","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Pagina"}},{"name":"por_pagina","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Por Pagina"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResultadoPaginado_str_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/cultivos/{cultivo}/jerarquia":{"get":{"tags":["Cultivos"],"summary":"Categorías superiores de un cultivo","description":"Devuelve la cadena de categorías superiores (ancestros) de un cultivo según la jerarquía oficial del Registro MAPA. Una autorización a cualquiera de estas categorías superiores cubre automáticamente al cultivo consultado (ej. una autorización en 'Frutales de cáscara' cubre 'Almendro').","operationId":"jerarquia_de_cultivo_api_v1_cultivos__cultivo__jerarquia_get","parameters":[{"name":"cultivo","in":"path","required":true,"schema":{"type":"string","title":"Cultivo"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JerarquiaCultivoResultado"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/cultivos/{cultivo}/productos":{"get":{"tags":["Cultivos"],"summary":"Productos autorizados para un cultivo","description":"Devuelve los productos fitosanitarios autorizados para el cultivo indicado. Por defecto incluye también productos autorizados a nivel de categorías superiores en la jerarquía oficial del MAPA (ej. una autorización en 'Frutales de cáscara' se incluye al consultar 'Almendro'), ya que el portal MAPA no aplica este rollup por sí solo. Desactívalo con `incluir_categorias_superiores=false` para replicar el comportamiento del portal (sólo el cultivo exacto).","operationId":"productos_por_cultivo_api_v1_cultivos__cultivo__productos_get","parameters":[{"name":"cultivo","in":"path","required":true,"schema":{"type":"string","title":"Cultivo"}},{"name":"incluir_categorias_superiores","in":"query","required":false,"schema":{"type":"boolean","description":"Incluir autorizaciones de categorías superiores del cultivo (ej. Almendro hereda de Frutales de cáscara). Por defecto true.","default":true,"title":"Incluir Categorias Superiores"},"description":"Incluir autorizaciones de categorías superiores del cultivo (ej. Almendro hereda de Frutales de cáscara). Por defecto true."},{"name":"pagina","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Pagina"}},{"name":"por_pagina","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Por Pagina"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResultadoCultivoProductos"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/plagas":{"get":{"tags":["Plagas"],"summary":"Listar plagas y organismos nocivos","description":"Catálogo de plagas, enfermedades y organismos nocivos para los que existe algún producto fitosanitario registrado.","operationId":"listar_plagas_api_v1_plagas_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filtro por nombre de plaga (parcial)","title":"Q"},"description":"Filtro por nombre de plaga (parcial)"},{"name":"pagina","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Pagina"}},{"name":"por_pagina","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Por Pagina"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResultadoPaginado_str_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/plagas/{plaga}/productos":{"get":{"tags":["Plagas"],"summary":"Productos autorizados para una plaga","description":"Devuelve los productos fitosanitarios autorizados contra la plaga indicada.","operationId":"productos_por_plaga_api_v1_plagas__plaga__productos_get","parameters":[{"name":"plaga","in":"path","required":true,"schema":{"type":"string","title":"Plaga"}},{"name":"cultivo","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filtrar también por cultivo","title":"Cultivo"},"description":"Filtrar también por cultivo"},{"name":"pagina","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Pagina"}},{"name":"por_pagina","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Por Pagina"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResultadoPaginado_dict_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/usos":{"get":{"tags":["Usos"],"summary":"Buscar usos autorizados","description":"Devuelve los usos fitosanitarios (combinaciones cultivo × plaga × dosis) de todos los productos que coincidan con los filtros.","operationId":"buscar_usos_api_v1_usos_get","parameters":[{"name":"cultivo","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Cultivo (búsqueda parcial)","title":"Cultivo"},"description":"Cultivo (búsqueda parcial)"},{"name":"plaga","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Plaga u organismo (búsqueda parcial)","title":"Plaga"},"description":"Plaga u organismo (búsqueda parcial)"},{"name":"sustancia","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sustancia activa del producto","title":"Sustancia"},"description":"Sustancia activa del producto"},{"name":"pagina","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Pagina"}},{"name":"por_pagina","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Por Pagina"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResultadoPaginado_dict_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/usos/producto/{id_registro}":{"get":{"tags":["Usos"],"summary":"Usos de un producto concreto","description":"Devuelve todos los usos autorizados de un producto (todos sus formulados).","operationId":"usos_de_producto_api_v1_usos_producto__id_registro__get","parameters":[{"name":"id_registro","in":"path","required":true,"schema":{"type":"string","title":"Id Registro"}},{"name":"cultivo","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filtrar por cultivo","title":"Cultivo"},"description":"Filtrar por cultivo"},{"name":"plaga","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filtrar por plaga","title":"Plaga"},"description":"Filtrar por plaga"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Uso"},"title":"Response Usos De Producto Api V1 Usos Producto  Id Registro  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/movimientos":{"get":{"tags":["Movimientos del Registro"],"summary":"Movimientos del Registro Oficial","description":"Devuelve los movimientos (altas, bajas, renovaciones) del registro. Se sintetizan a partir de las fechas de los productos cuando el portal no expone un endpoint explícito de movimientos.","operationId":"listar_movimientos_api_v1_movimientos_get","parameters":[{"name":"tipo","in":"query","required":false,"schema":{"$ref":"#/components/schemas/TipoMovimiento","description":"Tipo de movimiento a filtrar","default":"todos"},"description":"Tipo de movimiento a filtrar"},{"name":"desde","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Fecha desde (YYYY-MM-DD)","title":"Desde"},"description":"Fecha desde (YYYY-MM-DD)"},{"name":"hasta","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Fecha hasta (YYYY-MM-DD)","title":"Hasta"},"description":"Fecha hasta (YYYY-MM-DD)"},{"name":"id_registro","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filtrar por ID de producto","title":"Id Registro"},"description":"Filtrar por ID de producto"},{"name":"pagina","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Pagina"}},{"name":"por_pagina","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Por Pagina"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResultadoPaginado_dict_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/ropo/dni/{dni}":{"get":{"tags":["ROPO"],"summary":"Inscripciones ROPO por DNI/NIE","description":"Devuelve todas las inscripciones en el ROPO asociadas a un DNI/NIE: como persona física (carnets de aplicador) y, opcionalmente, como establecimiento. Valida la letra de control antes de consultar.","operationId":"consultar_dni_api_v1_ropo_dni__dni__get","parameters":[{"name":"dni","in":"path","required":true,"schema":{"type":"string","title":"Dni"}},{"name":"establecimientos","in":"query","required":false,"schema":{"type":"boolean","description":"Incluir también inscripciones de establecimientos","default":true,"title":"Establecimientos"},"description":"Incluir también inscripciones de establecimientos"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConsultaRopo"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/ropo/dni/{dni}/vigencia":{"get":{"tags":["ROPO"],"summary":"¿Tiene carnet en vigor? (respuesta compacta)","description":"Comprobación rápida pensada para integraciones: devuelve si la persona está inscrita, sus niveles de capacitación y si alguno está en vigor.","operationId":"comprobar_vigencia_api_v1_ropo_dni__dni__vigencia_get","parameters":[{"name":"dni","in":"path","required":true,"schema":{"type":"string","title":"Dni"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VigenciaRopo"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/ropo/codigo/{codigo}":{"get":{"tags":["ROPO"],"summary":"Inscripciones ROPO por código de identificación","description":"Busca por código de identificación ROPO (ej. '0114286129SU/2'). Prueba primero en personas y después en establecimientos.","operationId":"consultar_codigo_api_v1_ropo_codigo__codigo__get","parameters":[{"name":"codigo","in":"path","required":true,"schema":{"type":"string","title":"Codigo"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConsultaRopo"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/ropo/buscar":{"get":{"tags":["ROPO"],"summary":"Buscar inscripciones por nombre o denominación social","description":"Busca inscripciones por nombre de persona o denominación del establecimiento (ej. 'fitosanitarios martin paez'). Mínimo 3 caracteres.","operationId":"buscar_nombre_api_v1_ropo_buscar_get","parameters":[{"name":"nombre","in":"query","required":true,"schema":{"type":"string","minLength":3,"description":"Nombre o denominación","title":"Nombre"},"description":"Nombre o denominación"},{"name":"tipo","in":"query","required":false,"schema":{"type":"string","pattern":"^(personas|establecimientos|ambos)$","description":"Dónde buscar: personas | establecimientos | ambos","default":"ambos","title":"Tipo"},"description":"Dónde buscar: personas | establecimientos | ambos"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConsultaRopo"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/whatsapp/webhook":{"post":{"tags":["WhatsApp"],"summary":"Webhook entrante de Twilio WhatsApp","description":"Recibe mensajes WhatsApp vía Twilio y responde con TwiML. Procesa el texto: si parece un nº de registro devuelve la ficha del producto + PDF adjunto; si es texto libre busca por nombre/sustancia.","operationId":"webhook_whatsapp_webhook_post","parameters":[{"name":"X-Twilio-Signature","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Twilio-Signature"}}],"requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_webhook_whatsapp_webhook_post"}}}},"responses":{"200":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/health":{"get":{"tags":["Sistema"],"summary":"Health check","description":"Devuelve el estado de disponibilidad de la API y la versión actual.","operationId":"health_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Health Health Get"}}}}}}},"/status":{"get":{"tags":["Sistema"],"summary":"Estado del sistema y caché","description":"Devuelve información de estado del sistema: versión, uptime, fuente de datos y caché.","operationId":"system_status_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response System Status Status Get"}}}}}}},"/cache/clear":{"get":{"tags":["Sistema"],"summary":"Vaciar la caché (dev only)","description":"Vacía toda la caché de la aplicación; solo disponible fuera de producción.","operationId":"clear_cache_cache_clear_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Clear Cache Cache Clear Get"}}}}}}}},"components":{"schemas":{"Body_webhook_whatsapp_webhook_post":{"properties":{"Body":{"type":"string","title":"Body","default":""},"From":{"type":"string","title":"From","default":""},"To":{"type":"string","title":"To","default":""}},"type":"object","title":"Body_webhook_whatsapp_webhook_post"},"CarnetRopo":{"properties":{"nivel":{"type":"string","title":"Nivel","description":"Nivel de capacitación (básico, cualificado, fumigador, piloto aplicador...)"},"fecha_caducidad":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fecha Caducidad","description":"Fecha de caducidad del carnet (ISO 8601: YYYY-MM-DD)"},"vigente":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Vigente","description":"True si la fecha de caducidad es posterior a hoy"}},"type":"object","required":["nivel"],"title":"CarnetRopo","description":"Un nivel de capacitación con su fecha de caducidad.\n\nUna misma persona puede tener varios niveles simultáneos\n(ej. 'Nivel cualificado' y 'Nivel piloto aplicador'), cada uno\ncon su propia fecha de caducidad."},"CategoriaJerarquia":{"properties":{"nombre":{"type":"string","title":"Nombre","description":"Nombre de la categoría"},"codigo":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Codigo","description":"Código jerárquico oficial MAPA (None si es el cultivo exacto)"},"es_categoria_superior":{"type":"boolean","title":"Es Categoria Superior","description":"False si es el cultivo solicitado; True si es un ancestro"},"total_productos_directos":{"type":"integer","title":"Total Productos Directos","description":"Productos autorizados directamente en esta categoría"}},"type":"object","required":["nombre","es_categoria_superior","total_productos_directos"],"title":"CategoriaJerarquia","description":"Una categoría del árbol de cultivos consultada al resolver autorizaciones."},"ConsultaRopo":{"properties":{"criterio":{"additionalProperties":true,"type":"object","title":"Criterio","description":"Criterios de búsqueda utilizados"},"total":{"type":"integer","title":"Total","description":"Número total de inscripciones encontradas"},"personas":{"items":{"$ref":"#/components/schemas/InscripcionRopo"},"type":"array","title":"Personas","description":"Inscripciones de personas físicas (con carnets)"},"establecimientos":{"items":{"$ref":"#/components/schemas/InscripcionRopo"},"type":"array","title":"Establecimientos","description":"Inscripciones de establecimientos"},"fuente":{"type":"string","title":"Fuente","description":"Origen de los datos","default":"mapa_ropo"},"fecha_consulta":{"type":"string","title":"Fecha Consulta","description":"Fecha en la que se realizó la consulta"}},"type":"object","required":["criterio","total"],"title":"ConsultaRopo","description":"Resultado de una consulta al ROPO.\n\nLas inscripciones se devuelven separadas por tipo: `personas` (con carnets)\ny `establecimientos` (con provincia/municipio), porque son registros distintos."},"Denominacion":{"properties":{"id_registro":{"type":"string","title":"Id Registro","description":"ID interno MAPA del producto"},"numero_registro":{"type":"string","title":"Numero Registro","description":"Número oficial de registro (p.ej. 'ES-00458')"},"nombre_comercial":{"type":"string","title":"Nombre Comercial","description":"Nombre comercial bajo el que se comercializa"},"titular":{"type":"string","title":"Titular","description":"Empresa titular del registro"},"fabricante":{"anyOf":[{"$ref":"#/components/schemas/Fabricante"},{"type":"null"}],"description":"Fabricante (si difiere del titular)"},"estado":{"$ref":"#/components/schemas/EstadoProducto","description":"Estado de inscripción"},"fecha_inscripcion":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fecha Inscripcion","description":"Fecha de inscripción (ISO 8601)"},"fecha_caducidad":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fecha Caducidad","description":"Fecha de caducidad (ISO 8601)"},"fecha_renovacion":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fecha Renovacion","description":"Fecha de última renovación"},"url_detalle":{"type":"string","title":"Url Detalle","description":"URL del detalle en el portal MAPA"}},"type":"object","required":["id_registro","numero_registro","nombre_comercial","titular","estado","url_detalle"],"title":"Denominacion","description":"Denominación comercial concreta de un formulado compartido entre empresas.\n\nEn el Registro Oficial del MAPA, un mismo formulado técnico (sustancia activa +\ntipo de formulación + concentración) puede ser comercializado por varias empresas\ncon distintos nombres comerciales y distintos números de registro."},"DenominacionGrupo":{"properties":{"formulado":{"type":"string","title":"Formulado","description":"Descriptor técnico del formulado compartido"},"numero_registro_consultado":{"type":"string","title":"Numero Registro Consultado","description":"Número/ID que se consultó para resolver el grupo"},"total":{"type":"integer","title":"Total","description":"Número de denominaciones encontradas"},"denominaciones":{"items":{"$ref":"#/components/schemas/Denominacion"},"type":"array","title":"Denominaciones","description":"Listado de denominaciones (titular × nombre comercial × nº registro)"},"fuente":{"type":"string","title":"Fuente","description":"Origen de los datos","default":"cache"}},"type":"object","required":["formulado","numero_registro_consultado","total"],"title":"DenominacionGrupo","description":"Conjunto de productos que comparten un mismo formulado técnico.\n\nEjemplo: 'OXICLORURO DE COBRE 50% [WP] P/P' es comercializado por ~38 empresas\ndistintas con sus respectivos nombres comerciales."},"EstadoProducto":{"type":"string","enum":["Inscrito","Cancelado","Caducado","Suspendido","En tramite","Desconocido"],"title":"EstadoProducto","description":"Estado de inscripción del producto en el Registro Oficial."},"Fabricante":{"properties":{"nombre":{"type":"string","title":"Nombre","description":"Nombre del fabricante / titular"},"pais":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pais","description":"País del fabricante"},"direccion":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Direccion","description":"Dirección"}},"type":"object","required":["nombre"],"title":"Fabricante","description":"Fabricante o titular del producto fitosanitario."},"Formulado":{"properties":{"numero_formulado":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Numero Formulado","description":"Número identificador del formulado"},"nombre":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Nombre","description":"Nombre comercial del formulado"},"tipo_formulacion":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tipo Formulacion","description":"Tipo de formulación (p.ej. SC, EC, WG)"},"tipo_formulacion_desc":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tipo Formulacion Desc","description":"Descripción del tipo de formulación"},"estado":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Estado","description":"Estado del formulado"},"fecha_autorizacion":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fecha Autorizacion","description":"Fecha de autorización"},"fecha_caducidad":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fecha Caducidad","description":"Fecha de caducidad del formulado"},"sustancias_activas":{"items":{"$ref":"#/components/schemas/SustanciaActiva"},"type":"array","title":"Sustancias Activas","description":"Composición: sustancias activas"},"usos":{"items":{"$ref":"#/components/schemas/Uso"},"type":"array","title":"Usos","description":"Usos autorizados de este formulado"},"envases":{"items":{"type":"string"},"type":"array","title":"Envases","description":"Tipos/tamaños de envases autorizados"},"observaciones":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Observaciones","description":"Observaciones del formulado"}},"type":"object","title":"Formulado","description":"Formulado registrado dentro de un producto fitosanitario."},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"InscripcionRopo":{"properties":{"tipo":{"type":"string","title":"Tipo","description":"'persona' o 'establecimiento'"},"codigo_identificacion":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Codigo Identificacion","description":"Código de identificación ROPO (ej. '0114286129SU/2')"},"nombre":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Nombre","description":"Nombre y apellidos o denominación social"},"provincia":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provincia","description":"Provincia (sólo establecimientos)"},"municipio":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Municipio","description":"Municipio (sólo establecimientos)"},"datos_contacto":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Datos Contacto","description":"Datos de contacto publicados"},"categoria":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Categoria","description":"Sector (Uso Profesional, Tratamientos, Suministrador, Asesoramiento, EOR)"},"carnets":{"items":{"$ref":"#/components/schemas/CarnetRopo"},"type":"array","title":"Carnets","description":"Niveles de capacitación con sus fechas (sólo personas físicas)"},"fecha_caducidad_inscripcion":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fecha Caducidad Inscripcion","description":"Fecha de caducidad de la inscripción (ISO 8601)"},"inscripcion_vigente":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Inscripcion Vigente","description":"True si la inscripción no está caducada a fecha de hoy"},"alerta_ccaa":{"type":"boolean","title":"Alerta Ccaa","description":"True si el registro aparece 'en rojo' en el portal: requiere consultar con la Comunidad Autónoma (expediente desactualizado)","default":false}},"type":"object","required":["tipo"],"title":"InscripcionRopo","description":"Una inscripción en el ROPO (persona física o establecimiento).\n\nPersona física y establecimiento son inscripciones DISTINTAS con datos\ndistintos: la persona tiene carnets (básico, cualificado, piloto aplicador);\nel establecimiento tiene provincia, municipio y datos de contacto, pero\nno carnets."},"JerarquiaCultivoResultado":{"properties":{"cultivo":{"$ref":"#/components/schemas/NodoCultivoOut"},"categorias_superiores":{"items":{"$ref":"#/components/schemas/NodoCultivoOut"},"type":"array","title":"Categorias Superiores","description":"De la más cercana (padre directo) a la más lejana (raíz)"}},"type":"object","required":["cultivo"],"title":"JerarquiaCultivoResultado","description":"Cadena de categorías superiores de un cultivo, sin consultar productos."},"NodoCultivoOut":{"properties":{"codigo":{"type":"string","title":"Codigo","description":"Código jerárquico (ej. '1.1.2.6.1')"},"nombre":{"type":"string","title":"Nombre","description":"Nombre común (ej. 'Almendro')"},"nombre_latin":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Nombre Latin","description":"Nombre científico"},"eppo":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Eppo","description":"Código(s) EPPO"},"grupo":{"type":"string","title":"Grupo","description":"especies_vegetales | productos_vegetales | otras_aplicaciones"},"uso_menor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Uso Menor","description":"'Uso menor', 'N/A' o None"},"observaciones":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Observaciones","description":"Notas oficiales del MAPA"}},"type":"object","required":["codigo","nombre","grupo"],"title":"NodoCultivoOut","description":"Un nodo del árbol de cultivos (catálogo oficial, sin productos)."},"OrdenCampo":{"type":"string","enum":["numero_registro","nombre_comercial","titular","estado","fecha_inscripcion","fecha_caducidad"],"title":"OrdenCampo"},"OrdenDireccion":{"type":"string","enum":["asc","desc"],"title":"OrdenDireccion"},"Plaga":{"properties":{"nombre":{"type":"string","title":"Nombre","description":"Nombre común de la plaga / enfermedad"},"nombre_cientifico":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Nombre Cientifico","description":"Nombre científico"},"codigo":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Codigo","description":"Código interno MAPA"},"tipo":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tipo","description":"Tipo de organismo (insecto, hongo, bacteria, virus, ácaro, nematodo, etc.)"}},"type":"object","required":["nombre"],"title":"Plaga","description":"Organismo nocivo objetivo de un uso fitosanitario."},"ProductoDetalle":{"properties":{"id_registro":{"type":"string","title":"Id Registro","description":"Identificador interno (ID numérico MAPA)"},"numero_registro":{"type":"string","title":"Numero Registro","description":"Número oficial de registro (p.ej. '00001')"},"nombre_comercial":{"type":"string","title":"Nombre Comercial","description":"Nombre comercial del producto"},"titular":{"type":"string","title":"Titular","description":"Nombre del titular del registro"},"estado":{"$ref":"#/components/schemas/EstadoProducto","description":"Estado de inscripción"},"fecha_inscripcion":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fecha Inscripcion","description":"Fecha de inscripción (ISO 8601)"},"fecha_caducidad":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fecha Caducidad","description":"Fecha de caducidad (ISO 8601)"},"funciones":{"items":{"type":"string"},"type":"array","title":"Funciones","description":"Funciones del producto (fungicida, insecticida, herbicida, etc.)"},"sustancias_activas":{"items":{"type":"string"},"type":"array","title":"Sustancias Activas","description":"Nombres de sustancias activas"},"url_detalle":{"type":"string","title":"Url Detalle","description":"URL del detalle en el portal MAPA"},"formulado":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Formulado","description":"Descriptor técnico del formulado (sustancia + tipo + concentración). Productos que comparten este valor son denominaciones comunes."},"fabricante":{"anyOf":[{"$ref":"#/components/schemas/Fabricante"},{"type":"null"}],"description":"Fabricante del producto"},"numero_formulados":{"type":"integer","title":"Numero Formulados","description":"Número de formulados registrados","default":0},"formulados_nombres":{"items":{"type":"string"},"type":"array","title":"Formulados Nombres","description":"Nombres de formulados"},"observaciones":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Observaciones","description":"Observaciones generales"},"fecha_renovacion":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fecha Renovacion","description":"Fecha de última renovación"},"clasificacion_peligro":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Clasificacion Peligro","description":"Clasificación de peligro (CLP)"},"uso_agricola":{"type":"boolean","title":"Uso Agricola","description":"Si es de uso agrícola","default":true},"uso_no_profesional":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Uso No Profesional","description":"Si está permitido para uso no profesional"},"formulados":{"items":{"$ref":"#/components/schemas/Formulado"},"type":"array","title":"Formulados","description":"Formulados registrados con composición y usos"},"sustancias_activas_detalle":{"items":{"$ref":"#/components/schemas/SustanciaActiva"},"type":"array","title":"Sustancias Activas Detalle","description":"Sustancias activas con detalle"},"usos":{"items":{"$ref":"#/components/schemas/Uso"},"type":"array","title":"Usos","description":"Todos los usos autorizados (todos los formulados)"},"cultivos_autorizados":{"items":{"type":"string"},"type":"array","title":"Cultivos Autorizados","description":"Lista de cultivos autorizados"},"plagas_autorizadas":{"items":{"type":"string"},"type":"array","title":"Plagas Autorizadas","description":"Lista de plagas para las que está autorizado"},"fuente":{"type":"string","title":"Fuente","description":"Fuente de los datos","default":"mapa_regfi"},"ultima_actualizacion":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ultima Actualizacion","description":"Timestamp de última actualización"},"raw_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Raw Url","description":"URL fuente de los datos"}},"type":"object","required":["id_registro","numero_registro","nombre_comercial","titular","estado","url_detalle"],"title":"ProductoDetalle","description":"Detalle completo de un producto fitosanitario."},"ProductoResumen":{"properties":{"id_registro":{"type":"string","title":"Id Registro","description":"Identificador interno (ID numérico MAPA)"},"numero_registro":{"type":"string","title":"Numero Registro","description":"Número oficial de registro (p.ej. '00001')"},"nombre_comercial":{"type":"string","title":"Nombre Comercial","description":"Nombre comercial del producto"},"titular":{"type":"string","title":"Titular","description":"Nombre del titular del registro"},"estado":{"$ref":"#/components/schemas/EstadoProducto","description":"Estado de inscripción"},"fecha_inscripcion":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fecha Inscripcion","description":"Fecha de inscripción (ISO 8601)"},"fecha_caducidad":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fecha Caducidad","description":"Fecha de caducidad (ISO 8601)"},"funciones":{"items":{"type":"string"},"type":"array","title":"Funciones","description":"Funciones del producto (fungicida, insecticida, herbicida, etc.)"},"sustancias_activas":{"items":{"type":"string"},"type":"array","title":"Sustancias Activas","description":"Nombres de sustancias activas"},"url_detalle":{"type":"string","title":"Url Detalle","description":"URL del detalle en el portal MAPA"}},"type":"object","required":["id_registro","numero_registro","nombre_comercial","titular","estado","url_detalle"],"title":"ProductoResumen","description":"Vista reducida de un producto para listados y búsquedas."},"ResultadoCultivoProductos":{"properties":{"items":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total","description":"Total de productos (tras incluir categorías superiores)"},"pagina":{"type":"integer","title":"Pagina"},"por_pagina":{"type":"integer","title":"Por Pagina"},"paginas":{"type":"integer","title":"Paginas"},"fuente":{"type":"string","title":"Fuente","description":"Origen de los datos","default":"mapa_regfi"},"cultivo_resuelto":{"type":"string","title":"Cultivo Resuelto","description":"Nombre tal como lo reconoce el portal MAPA"},"incluye_categorias_superiores":{"type":"boolean","title":"Incluye Categorias Superiores","description":"Si la búsqueda expandió a categorías superiores del cultivo"},"categorias_consultadas":{"items":{"$ref":"#/components/schemas/CategoriaJerarquia"},"type":"array","title":"Categorias Consultadas"}},"type":"object","required":["total","pagina","por_pagina","paginas","cultivo_resuelto","incluye_categorias_superiores"],"title":"ResultadoCultivoProductos","description":"Productos autorizados para un cultivo, con trazabilidad de la jerarquía aplicada."},"ResultadoPaginado_ProductoResumen_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/ProductoResumen"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total","description":"Total de resultados"},"pagina":{"type":"integer","title":"Pagina","description":"Página actual"},"por_pagina":{"type":"integer","title":"Por Pagina","description":"Resultados por página"},"paginas":{"type":"integer","title":"Paginas","description":"Total de páginas"},"fuente":{"type":"string","title":"Fuente","description":"Origen de los datos: cache | mapa_json | mapa_html","default":"cache"}},"type":"object","required":["items","total","pagina","por_pagina","paginas"],"title":"ResultadoPaginado[ProductoResumen]"},"ResultadoPaginado_dict_":{"properties":{"items":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total","description":"Total de resultados"},"pagina":{"type":"integer","title":"Pagina","description":"Página actual"},"por_pagina":{"type":"integer","title":"Por Pagina","description":"Resultados por página"},"paginas":{"type":"integer","title":"Paginas","description":"Total de páginas"},"fuente":{"type":"string","title":"Fuente","description":"Origen de los datos: cache | mapa_json | mapa_html","default":"cache"}},"type":"object","required":["items","total","pagina","por_pagina","paginas"],"title":"ResultadoPaginado[dict]"},"ResultadoPaginado_str_":{"properties":{"items":{"items":{"type":"string"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total","description":"Total de resultados"},"pagina":{"type":"integer","title":"Pagina","description":"Página actual"},"por_pagina":{"type":"integer","title":"Por Pagina","description":"Resultados por página"},"paginas":{"type":"integer","title":"Paginas","description":"Total de páginas"},"fuente":{"type":"string","title":"Fuente","description":"Origen de los datos: cache | mapa_json | mapa_html","default":"cache"}},"type":"object","required":["items","total","pagina","por_pagina","paginas"],"title":"ResultadoPaginado[str]"},"SustanciaActiva":{"properties":{"nombre":{"type":"string","title":"Nombre","description":"Nombre de la sustancia activa"},"numero_cas":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Numero Cas","description":"Número CAS de la sustancia"},"concentracion":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Concentracion","description":"Concentración en el formulado (p.ej. '250 g/L')"},"unidad":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Unidad","description":"Unidad de concentración"},"funcion":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Funcion","description":"Función de la sustancia (p.ej. fungicida)"},"aprobada_ue":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Aprobada Ue","description":"Aprobación a nivel europeo"},"fecha_aprobacion_ue":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fecha Aprobacion Ue","description":"Fecha de aprobación UE"},"fecha_expiracion_ue":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fecha Expiracion Ue","description":"Fecha de expiración aprobación UE"},"candidata_sustitucion":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Candidata Sustitucion","description":"Si es candidata a sustitución (Reg. 1107/2009)"}},"type":"object","required":["nombre"],"title":"SustanciaActiva","description":"Sustancia activa componente de un formulado fitosanitario."},"TipoMovimiento":{"type":"string","enum":["inscripcion","cancelacion","renovacion","modificacion","suspension","todos"],"title":"TipoMovimiento"},"Uso":{"properties":{"id_uso":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id Uso","description":"Identificador interno del uso"},"cultivo":{"type":"string","title":"Cultivo","description":"Nombre del cultivo"},"cultivo_codigo":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cultivo Codigo","description":"Código MAPA del cultivo"},"plaga":{"type":"string","title":"Plaga","description":"Nombre de la plaga u organismo nocivo"},"plaga_codigo":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Plaga Codigo","description":"Código MAPA de la plaga"},"plaga_obj":{"anyOf":[{"$ref":"#/components/schemas/Plaga"},{"type":"null"}],"description":"Detalle de la plaga"},"dosis_min":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dosis Min","description":"Dosis mínima autorizada"},"dosis_max":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dosis Max","description":"Dosis máxima autorizada"},"dosis_unidad":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dosis Unidad","description":"Unidad de dosis (L/ha, kg/ha, etc.)"},"dosis_texto":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dosis Texto","description":"Dosis expresada como texto libre"},"volumen_caldo":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Volumen Caldo","description":"Volumen de caldo (L/ha)"},"num_aplicaciones_max":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Num Aplicaciones Max","description":"Número máximo de aplicaciones por campaña"},"intervalo_aplicaciones":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Intervalo Aplicaciones","description":"Intervalo mínimo entre aplicaciones (días)"},"plazo_seguridad":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Plazo Seguridad","description":"Plazo de seguridad (días) antes de cosecha"},"bbch_inicio":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bbch Inicio","description":"Estado fenológico BBCH de inicio"},"bbch_fin":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bbch Fin","description":"Estado fenológico BBCH de fin"},"condiciones_especiales":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Condiciones Especiales","description":"Observaciones y condiciones especiales de uso"},"eficacia":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Eficacia","description":"Información de eficacia / ensayos"}},"type":"object","required":["cultivo","plaga"],"title":"Uso","description":"Uso autorizado de un producto fitosanitario (cultivo × plaga × condiciones)."},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"VigenciaRopo":{"properties":{"dni":{"type":"string","title":"Dni","description":"DNI/NIE consultado"},"encontrado":{"type":"boolean","title":"Encontrado","description":"True si hay alguna inscripción en ROPO"},"nombre":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Nombre","description":"Nombre del titular si se encontró"},"carnets":{"items":{"$ref":"#/components/schemas/CarnetRopo"},"type":"array","title":"Carnets","description":"Niveles encontrados con su vigencia"},"alguno_vigente":{"type":"boolean","title":"Alguno Vigente","description":"True si al menos un carnet está en vigor","default":false},"alerta_ccaa":{"type":"boolean","title":"Alerta Ccaa","description":"True si el registro requiere consulta con la CCAA","default":false},"fecha_consulta":{"type":"string","title":"Fecha Consulta"}},"type":"object","required":["dni","encontrado"],"title":"VigenciaRopo","description":"Respuesta compacta para comprobar la vigencia del carnet de una persona.\n\nPensada para integraciones (Odoo, bot WhatsApp) donde solo interesa\nsaber si puede aplicar fitosanitarios y hasta cuándo."}}}}