{"openapi":"3.1.0","info":{"title":"laudos-colombia RAG","description":"Búsqueda semántica + Q&A sobre 2,628 laudos arbitrales colombianos.","version":"0.1.0"},"paths":{"/health":{"get":{"summary":"Health","operationId":"health_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Health Health Get"}}}}}}},"/search":{"post":{"summary":"Search","operationId":"search_search_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"x-no-track","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-No-Track"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/search/facets":{"get":{"summary":"Search Facets","description":"Buckets agregados del corpus para faceted search (Sprint 18).\n\nCacheado con lru_cache(maxsize=1) — el corpus es read-only por container.\nPara invalidar tras un reload de datos, reiniciar el proceso (o exponer\nun endpoint admin de invalidación — fuera de alcance ahora).","operationId":"search_facets_search_facets_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Search Facets Search Facets Get"}}}}}}},"/ask":{"post":{"summary":"Ask","operationId":"ask_ask_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AskRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AskResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/chat":{"post":{"summary":"Chat","operationId":"chat_chat_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/topics":{"get":{"summary":"List Topics","description":"Lista topics ordenados por tamaño descendente.","operationId":"list_topics_topics_get","parameters":[{"name":"n","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"N"}},{"name":"exclude_outliers","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Exclude Outliers"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Topics Topics Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/topic/{topic_id}":{"get":{"summary":"Get Topic","description":"Detalle de un topic: keywords + chunks representativos.","operationId":"get_topic_topic__topic_id__get","parameters":[{"name":"topic_id","in":"path","required":true,"schema":{"type":"integer","title":"Topic Id"}},{"name":"n_samples","in":"query","required":false,"schema":{"type":"integer","default":5,"title":"N Samples"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Topic Topic  Topic Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/graph/normas-top":{"get":{"summary":"Graph Normas Top","description":"Top normas más citadas (PageRank desde data/graph/pagerank.parquet).","operationId":"graph_normas_top_graph_normas_top_get","parameters":[{"name":"n","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"N"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Graph Normas Top Graph Normas Top Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/graph/explain/{node_id}":{"get":{"summary":"Graph Explain","description":"Metadata + ejemplos de citas para un nodo del citation graph.","operationId":"graph_explain_graph_explain__node_id__get","parameters":[{"name":"node_id","in":"path","required":true,"schema":{"type":"string","title":"Node Id"}},{"name":"top_n","in":"query","required":false,"schema":{"type":"integer","default":5,"title":"Top N"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Graph Explain Graph Explain  Node Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/graph/lineage/{node_id}":{"get":{"summary":"Graph Lineage","description":"Distribución de función discursiva (aprobatoria/critica/distinguishing/\nreferencial) de las citas a un nodo target.","operationId":"graph_lineage_graph_lineage__node_id__get","parameters":[{"name":"node_id","in":"path","required":true,"schema":{"type":"string","title":"Node Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Graph Lineage Graph Lineage  Node Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/graph/similar/{node_id}":{"get":{"summary":"Graph Similar","description":"Nodos del grafo semánticamente similares a node_id (cosine sobre BGE-M3\nsobre label_canonical).","operationId":"graph_similar_graph_similar__node_id__get","parameters":[{"name":"node_id","in":"path","required":true,"schema":{"type":"string","title":"Node Id"}},{"name":"n","in":"query","required":false,"schema":{"type":"integer","default":10,"title":"N"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Graph Similar Graph Similar  Node Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/public/search":{"post":{"summary":"Public Search","description":"Búsqueda sobre corpus_chunks_public (anonimizado). Endpoint expuesto a usuarios externos.","operationId":"public_search_public_search_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/token":{"post":{"summary":"Issue Token","description":"Emite JWT con scope=admin tras validar master_password (env).","operationId":"issue_token_auth_token_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/reveal":{"post":{"summary":"Admin Reveal","description":"Revierte un token anonimizado a su valor original. Requiere JWT scope=admin.\nCarga el mapping cifrado, descifra con master_key, busca el token.","operationId":"admin_reveal_admin_reveal_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RevealRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Admin Reveal Admin Reveal Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/public/topics":{"get":{"summary":"Public Topics","description":"Alias público de /topics. Mismo contenido (los topics no contienen PII).","operationId":"public_topics_public_topics_get","parameters":[{"name":"n","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"N"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Public Topics Public Topics Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/laudo/{caso_id}/entities":{"get":{"summary":"Laudo Entities","description":"Entidades NER de un laudo. Filtros opcionales por source y type.","operationId":"laudo_entities_laudo__caso_id__entities_get","parameters":[{"name":"caso_id","in":"path","required":true,"schema":{"type":"string","title":"Caso Id"}},{"name":"source","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"}},{"name":"type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Laudo Entities Laudo  Caso Id  Entities Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/laudo/{caso_id}/decision":{"get":{"summary":"Laudo Decision","description":"Decisión clasificada (heurística + LLM) si está en data/decisions.jsonl.","operationId":"laudo_decision_laudo__caso_id__decision_get","parameters":[{"name":"caso_id","in":"path","required":true,"schema":{"type":"string","title":"Caso Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Laudo Decision Laudo  Caso Id  Decision Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/laudo/{caso_id}/summary":{"get":{"summary":"Laudo Summary","description":"Resumen ejecutivo del laudo (Kimi).","operationId":"laudo_summary_laudo__caso_id__summary_get","parameters":[{"name":"caso_id","in":"path","required":true,"schema":{"type":"string","title":"Caso Id"}},{"name":"source","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Laudo Summary Laudo  Caso Id  Summary Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/laudo/{caso_id}/arguments":{"get":{"summary":"Laudo Arguments","description":"Pares premise→conclusion identificados en el laudo.","operationId":"laudo_arguments_laudo__caso_id__arguments_get","parameters":[{"name":"caso_id","in":"path","required":true,"schema":{"type":"string","title":"Caso Id"}},{"name":"n","in":"query","required":false,"schema":{"type":"integer","default":20,"title":"N"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Laudo Arguments Laudo  Caso Id  Arguments Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/laudo/{caso_id}/problemas-juridicos":{"get":{"summary":"Laudo Problemas Juridicos","description":"Problemas jurídicos identificados que el tribunal arbitral debió resolver.\n\nCada problema jurídico es una pregunta concreta de derecho extraída por LLM\n(Claude Haiku 4.5) sobre las secciones de razonamiento del laudo. Sólo está\ndisponible para los ~100 laudos del top combinado (alta cuantía + alta\ncitación) cubiertos en S28-5.\n\nSchema:\n- `caso_id`, `source`\n- `materia`, `title` (metadatos)\n- `n_problemas` (0..8)\n- `problemas`: lista de `{numero, problema, normas_invocadas, estandar_aplicado, decision_tribunal}`\n- `nota`: comentario del extractor (ej. \"fragmentos_insuficientes\")\n- `model`, `generated_at`, `chunks_used`","operationId":"laudo_problemas_juridicos_laudo__caso_id__problemas_juridicos_get","parameters":[{"name":"caso_id","in":"path","required":true,"schema":{"type":"string","title":"Caso Id"}},{"name":"source","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Laudo Problemas Juridicos Laudo  Caso Id  Problemas Juridicos Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/laudo/{caso_id}/hechos":{"get":{"summary":"Laudo Hechos","description":"Hechos relevantes extraídos por Claude Haiku 4.5 (sprint 28.4).\n\nDevuelve la cronología fáctica del laudo:\n- `origen_relacion`: 1-3 frases sobre el contrato/relación que dió origen.\n- `cronologia`: 5-10 hitos `{fecha_aprox, descripcion}` en orden temporal.\n- `causa_conflicto`: 1-3 frases sobre el detonante de la disputa.\n- `posiciones`: `{convocante, convocada}` con la tesis de cada parte.\n\nSólo está disponible para los ~100 laudos top combinado\n(alta cuantía + alta citación + alta densidad de estándares).\nSi no existe extracción para el caso → 404.","operationId":"laudo_hechos_laudo__caso_id__hechos_get","parameters":[{"name":"caso_id","in":"path","required":true,"schema":{"type":"string","title":"Caso Id"}},{"name":"source","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Laudo Hechos Laudo  Caso Id  Hechos Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/laudo/{caso_id}/salvamentos":{"get":{"summary":"Laudo Salvamentos","description":"Salvamentos y aclaraciones de voto de un laudo arbitral.\n\nDevuelve la lista (puede estar vacía) extraída por LLM en sprint 28.6.\nSi la tabla `corpus_salvamentos_v2` no existe todavía, cae al backfill\nsobre `corpus_salvamentos` (v1) para mantener compatibilidad.","operationId":"laudo_salvamentos_laudo__caso_id__salvamentos_get","parameters":[{"name":"caso_id","in":"path","required":true,"schema":{"type":"string","title":"Caso Id"}},{"name":"source","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Laudo Salvamentos Laudo  Caso Id  Salvamentos Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/laudo/{caso_id}/text":{"get":{"summary":"Laudo Text","description":"Devuelve el texto anonimizado completo del laudo.","operationId":"laudo_text_laudo__caso_id__text_get","parameters":[{"name":"caso_id","in":"path","required":true,"schema":{"type":"string","title":"Caso Id"}},{"name":"source","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/laudo/{caso_id}/pdf":{"get":{"summary":"Laudo Pdf","description":"Devuelve el PDF original del laudo.","operationId":"laudo_pdf_laudo__caso_id__pdf_get","parameters":[{"name":"caso_id","in":"path","required":true,"schema":{"type":"string","title":"Caso Id"}},{"name":"source","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/laudo/{caso_id}/package":{"get":{"summary":"Laudo Package","description":"ZIP con texto + metadata.json + summary + decision + entities.","operationId":"laudo_package_laudo__caso_id__package_get","parameters":[{"name":"caso_id","in":"path","required":true,"schema":{"type":"string","title":"Caso Id"}},{"name":"source","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/similar/{chunk_id}":{"get":{"summary":"Similar Chunks","description":"Devuelve los top-K chunks más cercanos (cosine) al chunk dado.\n\nExcluye el propio chunk y otros chunks del mismo caso (para no devolver\nself-similar). Útil para \"ver casos análogos\" desde un hit.","operationId":"similar_chunks_similar__chunk_id__get","parameters":[{"name":"chunk_id","in":"path","required":true,"schema":{"type":"string","title":"Chunk Id"}},{"name":"top_k","in":"query","required":false,"schema":{"type":"integer","default":10,"title":"Top K"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/arbitro/{arbitro_id}":{"get":{"summary":"Arbitro Dossier","description":"Dossier público del árbitro: laudos, materias, decisiones, anulaciones.\n\nMigrado Sprint 23 · B2: usa ``v_arbitros_clean`` para devolver\n``canonical`` en Title Case (canonical_v2) y excluir no-árbitros.\nFallback a ``view_arbitros_track_record`` si la VIEW limpia no existe.","operationId":"arbitro_dossier_arbitro__arbitro_id__get","parameters":[{"name":"arbitro_id","in":"path","required":true,"schema":{"type":"string","title":"Arbitro Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Arbitro Dossier Arbitro  Arbitro Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/arbitro/{arbitro_id}/bio":{"get":{"summary":"Arbitro Bio","description":"Perfil biográfico del árbitro.\n\nDevuelve:\n- `bio`: perfil curado estructurado (formacion, firma, cargos…) desde\n  `corpus_arbitros_bio` — puede ser None si no hay registro.\n- `bio_text`: narrativa generada por Claude (Sprint 20, top 50 árbitros\n  por n_laudos) desde `arbitros_bios_v2`. Si no existe, se genera un\n  fallback corto auto-generado a partir de los stats del track-record.\n- `fallback` (bool): True si `bio_text` viene del auto-generador\n  (no de Claude), para que la UI muestre badge \"expandida próximamente\".\n\nCache LRU 128 entries (idempotente por arbitro_id).","operationId":"arbitro_bio_arbitro__arbitro_id__bio_get","parameters":[{"name":"arbitro_id","in":"path","required":true,"schema":{"type":"string","title":"Arbitro Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Arbitro Bio Arbitro  Arbitro Id  Bio Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/parte/{parte_id}":{"get":{"summary":"Parte Dossier","description":"Dossier público de una parte: apariciones, roles, outcomes, materias.","operationId":"parte_dossier_parte__parte_id__get","parameters":[{"name":"parte_id","in":"path","required":true,"schema":{"type":"string","title":"Parte Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Parte Dossier Parte  Parte Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/parte/{parte_ref}/casos":{"get":{"summary":"Parte Casos","description":"Lista paginada de casos donde la parte aparece (convocante o convocada).\n\nparte_ref puede ser el canonical exacto o un fragmento. Búsqueda LIKE\ncase-insensitive y normalizada por tildes.\n\nSprint 23 · B3: ahora la búsqueda matchea contra `convocante_v2` y\n`convocada_v2` (desde `v_partes_clean`) además de los campos v1 de\n`corpus_meta`, para que la búsqueda con nombres limpios funcione.\nSi la VIEW no existe, cae a búsqueda v1 únicamente (retrocompat).","operationId":"parte_casos_parte__parte_ref__casos_get","parameters":[{"name":"parte_ref","in":"path","required":true,"schema":{"type":"string","title":"Parte Ref"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","default":25,"title":"Page Size"}},{"name":"role","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Role"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Parte Casos Parte  Parte Ref  Casos Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/apoderados":{"get":{"summary":"Apoderados List","description":"Lista paginada de apoderados (personas reales) desde\n`v_apoderados_persona_real`, agregados por `nombre_v2`.\n\nExcluye fragmentos NER (\"Cuaderno Principal No\", \"Acta No\",\n\"Procedimiento Civil\", etc.) que si aparecerian en `corpus_apoderados` raw.\n\nFallback: si la VIEW canonica no existe, agrega desde `corpus_apoderados`\nraw (con warning + flag `uses_v2=false` en la respuesta).","operationId":"apoderados_list_apoderados_get","parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Page Size"}},{"name":"min_apariciones","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Min Apariciones"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Apoderados List Apoderados Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/apoderados/search":{"get":{"summary":"Apoderados Search","description":"Autocomplete por nombre limpio (`nombre_v2`) de apoderado.\n\nBusca contra `v_apoderados_persona_real` (excluye fragmentos NER).\nFallback a `corpus_apoderados.nombre` con warning si la VIEW no existe.","operationId":"apoderados_search_apoderados_search_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","title":"Q"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":15,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Apoderados Search Apoderados Search Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/partes/ranking":{"get":{"summary":"Partes Ranking","description":"Ranking de partes por numero de apariciones en el corpus, usando\n`v_partes_clean` (canonical_v2 + entity_type).\n\nFiltros opcionales: `role` (convocante / convocada) y `entity_type`\n(persona_juridica | persona_natural | entidad_publica | desconocido).\nExcluye partes con canonical_v2 NULL/vacio.\n\nNota Sprint 23 . B3: como C2 NO auto-mergea, duplicaciones tipo\n\"ANI\" vs \"Agencia Nacional Infraestructura\" se cuentan como entradas\nseparadas. La unificacion queda para sprint posterior.","operationId":"partes_ranking_partes_ranking_get","parameters":[{"name":"role","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Role"}},{"name":"entity_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Entity Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"min_apariciones","in":"query","required":false,"schema":{"type":"integer","default":2,"title":"Min Apariciones"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Partes Ranking Partes Ranking Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/stats/decisions":{"get":{"summary":"Stats Decisions","description":"Distribución de decisiones a nivel corpus.","operationId":"stats_decisions_stats_decisions_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Stats Decisions Stats Decisions Get"}}}}}}},"/predict_outcome":{"post":{"summary":"Predict Outcome Endpoint","description":"LLM-as-classifier: predice outcome de un caso usando top-K precedentes\nsimilares como few-shot. Devuelve label + probabilidades + razonamiento +\nprecedentes citados. Costo aprox: $0.005-0.02/consulta.","operationId":"predict_outcome_endpoint_predict_outcome_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PredictOutcomeRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Predict Outcome Endpoint Predict Outcome Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/stats/entities":{"get":{"summary":"Stats Entities","description":"Distribución de entidades NER a nivel corpus.","operationId":"stats_entities_stats_entities_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Stats Entities Stats Entities Get"}}}}}}},"/admin/canonical_views/rebuild":{"post":{"summary":"Admin Canonical Views Rebuild","description":"Re-ejecuta ``ensure_canonical_views`` sobre la conexión activa.\n\nIdempotente: CREATE OR REPLACE de las 9 VIEWs y ADD COLUMN solo si falta.\nRetorna el dict de ``ensure_canonical_views``.","operationId":"admin_canonical_views_rebuild_admin_canonical_views_rebuild_post","parameters":[{"name":"x-laudos-admin-token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Laudos-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Admin Canonical Views Rebuild Admin Canonical Views Rebuild Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/migrate_db_v2":{"post":{"summary":"Admin Migrate Db V2","description":"Migración estructural v2 + populate desde parquets + rebuild VIEWs.\n\nWrappea ``ensure_canonical_views`` con:\n  - ``dry_run``: audita schema y parquets sin tocar nada.\n  - ``force_recolumn``: DROP + ADD columnas v2 antes de poblar.\n  - default: ALTER TABLE solo si faltan columnas + UPDATE desde parquets\n    + ``CREATE OR REPLACE`` de las VIEWs canónicas.\n\nRetorna ``{dry_run, before, actions, after, views_rebuilt, errors}``.","operationId":"admin_migrate_db_v2_admin_migrate_db_v2_post","parameters":[{"name":"x-laudos-admin-token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Laudos-Admin-Token"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/MigrateDbV2Request"},{"type":"null"}],"title":"Req"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Admin Migrate Db V2 Admin Migrate Db V2 Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/clean_arbitros_decisions":{"post":{"summary":"Admin Clean Arbitros Decisions","description":"Limpieza determinística de outliers en `corpus_arbitros_decisions`.\n\nSprint 24 C2 limpió `corpus_meta_v2` via validación LLM, pero\n`corpus_arbitros_decisions` (tabla legacy que usan los rankings de\nárbitros y partes) quedó con outliers absurdos: monto_concedido >= 1e13,\nconcedido > pretendido × 26, porcentajes > 500%, duraciones > 200 años.\n\nEstrategia (3 pases en orden, contadores separados):\n\n  1) **Sync desde `corpus_meta_v2`**: para cada `(caso_id, source)` que\n     exista en ambos, sobrescribir `monto_pretendido` y `monto_concedido`\n     con los valores canónicos de v2 (que ya pasaron el cap LLM-validado).\n\n  2) **Reglas determinísticas** (para filas SIN match en v2):\n     - `monto_concedido >= 1e13` → NULL\n     - `monto_pretendido >= 1e13` → NULL\n     - `monto_concedido > monto_pretendido * 1.5` (ambos no nulos) → NULL\n       en concedido (es imposible que concedan más de pretendido).\n     - `porcentaje_concedido > 1.5` → NULL\n     - `duracion_meses > 240 OR <= 0` → NULL\n\n  3) **Backup** previo (`corpus_arbitros_decisions_backup_<ts>`) cuando\n     `dry_run=False`. Permite restore si algo sale mal.\n\nArgs:\n    dry_run: si True (default), audita sin tocar. False = aplica.\n\nReturns:\n    ``{dry_run, before, plan, after, errors}``.","operationId":"admin_clean_arbitros_decisions_admin_clean_arbitros_decisions_post","parameters":[{"name":"x-laudos-admin-token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Laudos-Admin-Token"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/CleanArbitrosDecisionsRequest"},{"type":"null"}],"title":"Req"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Admin Clean Arbitros Decisions Admin Clean Arbitros Decisions Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/db_schema_diag":{"get":{"summary":"Admin Db Schema Diag","description":"Diagnóstico read-only del schema de tablas Sprint 22 (v2).\n\nPara cada una de ``corpus_arbitros``, ``corpus_apoderados`` y\n``corpus_meta``:\n\n- ``exists``: ``bool`` — si la tabla existe en el schema ``main``.\n- ``n_total``: ``int`` — ``COUNT(*)`` total de filas.\n- ``columns``: lista de ``{name, type, n_not_null, n_total, is_v2_target}``.\n  ``is_v2_target`` marca las columnas esperadas por Sprint 22 (definidas\n  en ``canonical_views.COLUMNS_V2``).\n- ``v2_columns_missing``: subset de columnas v2 esperadas que NO están en\n  la tabla — señal directa de hipótesis H1.\n- ``v2_columns_all_null``: columnas v2 presentes pero con ``n_not_null=0``\n  — señal directa de hipótesis H2 (columnas creadas pero no pobladas).\n\nIdempotente, read-only — solo ``SELECT`` sobre ``information_schema`` y\n``COUNT(<col>)`` para detectar NULLs. NO expone valores de filas.","operationId":"admin_db_schema_diag_admin_db_schema_diag_get","parameters":[{"name":"x-laudos-admin-token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Laudos-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Admin Db Schema Diag Admin Db Schema Diag Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/parquets_diag":{"get":{"summary":"Admin Parquets Diag","description":"Diagnóstico de disponibilidad de parquets v2 (sprint20/21/22).\n\nInspecciona el filesystem (Modal: ``/data``, local: ``data/``) replicando\nla resolución de ``canonical_views._sprint22_dir()`` y extendiéndola a\n``sprint20`` y ``sprint21``. Para cada parquet esperado retorna:\n\n- ``path``: ruta absoluta inspeccionada.\n- ``exists``: ``bool``.\n- ``size_bytes`` / ``mtime_iso``: stat() del archivo.\n- ``readable``: ``bool`` — ``read_parquet().LIMIT 1`` exitoso.\n- ``columns``: lista de columnas detectadas (vía ``DESCRIBE``).\n- ``error``: mensaje si el read_parquet falla.\n\nTambién expone ``data_dir_env`` (``LAUDOS_DATA_DIR``) y ``cwd`` — útil para\ndistinguir si el problema es de path resolution (H2) o de archivos\nausentes en el volumen.","operationId":"admin_parquets_diag_admin_parquets_diag_get","parameters":[{"name":"x-laudos-admin-token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Laudos-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Admin Parquets Diag Admin Parquets Diag Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/analytics/outcome-by-materia":{"get":{"summary":"Analytics Outcome By Materia","operationId":"analytics_outcome_by_materia_analytics_outcome_by_materia_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Analytics Outcome By Materia Analytics Outcome By Materia Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/analytics/timing-benchmarks":{"get":{"summary":"Analytics Timing Benchmarks","operationId":"analytics_timing_benchmarks_analytics_timing_benchmarks_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Analytics Timing Benchmarks Analytics Timing Benchmarks Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/analytics/norm-success":{"get":{"summary":"Analytics Norm Success","operationId":"analytics_norm_success_analytics_norm_success_get","parameters":[{"name":"norma","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Norma"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Analytics Norm Success Analytics Norm Success Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/analytics/arbitro/{arbitro_id}":{"get":{"summary":"Analytics Arbitro","operationId":"analytics_arbitro_analytics_arbitro__arbitro_id__get","parameters":[{"name":"arbitro_id","in":"path","required":true,"schema":{"type":"string","title":"Arbitro Id"}},{"name":"x-laudos-admin-token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Laudos-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Analytics Arbitro Analytics Arbitro  Arbitro Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/analytics/parte/{parte_id}":{"get":{"summary":"Analytics Parte","operationId":"analytics_parte_analytics_parte__parte_id__get","parameters":[{"name":"parte_id","in":"path","required":true,"schema":{"type":"string","title":"Parte Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Analytics Parte Analytics Parte  Parte Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/arbitros":{"get":{"summary":"Arbitros Directory","description":"Directorio paginable de árbitros con filtros.\n\nsort: n_laudos | mediana_duracion_meses | n_anulados | tasa_anulacion |\n      canonical | ratio_fav_convocante\n\nSprint 23 · B2: usa ``v_arbitros_clean`` (canonical_v2 Title Case, sin\nno-árbitros) cuando esté disponible; fallback a\n``view_arbitros_track_record``.","operationId":"arbitros_directory_arbitros_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Q"}},{"name":"materia","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Materia"}},{"name":"source","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"}},{"name":"min_laudos","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Min Laudos"}},{"name":"has_anulaciones","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Anulaciones"}},{"name":"sort","in":"query","required":false,"schema":{"type":"string","default":"n_laudos","title":"Sort"}},{"name":"order","in":"query","required":false,"schema":{"type":"string","default":"desc","title":"Order"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","default":20,"title":"Page Size"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Arbitros Directory Arbitros Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/arbitros/search":{"get":{"summary":"Arbitros Search","description":"Autocomplete por nombre canonical.\n\nSprint 23 · B2: matchea contra ``v_arbitros_clean.canonical`` (Title Case,\nsin tratamientos, sin ALL CAPS) cuando esté disponible; fallback al legacy.","operationId":"arbitros_search_arbitros_search_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","title":"Q"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":15,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Arbitros Search Arbitros Search Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/arbitros/stats":{"get":{"summary":"Arbitros Stats","description":"Métricas agregadas del directorio.\n\nSprint 23 · B2: usa ``v_arbitros_clean`` cuando esté disponible\n(excluye no-árbitros como \"DO NING\"); fallback a legacy.","operationId":"arbitros_stats_arbitros_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Arbitros Stats Arbitros Stats Get"}}}}}}},"/arbitros/materias":{"get":{"summary":"Arbitros Materias","description":"Lista de materias disponibles para filtro, ordenadas por frecuencia.\n\nExcluye `sin_materia` (placeholder para casos sin clasificación de materia).","operationId":"arbitros_materias_arbitros_materias_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Arbitros Materias Arbitros Materias Get"}}}}}}},"/arbitro/{arbitro_ref}/casos":{"get":{"summary":"Arbitro Casos","description":"Lista paginada de casos donde el árbitro participó.\n\narbitro_ref puede ser arbitro_id (arb_xxx) o nombre canonical.","operationId":"arbitro_casos_arbitro__arbitro_ref__casos_get","parameters":[{"name":"arbitro_ref","in":"path","required":true,"schema":{"type":"string","title":"Arbitro Ref"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","default":25,"title":"Page Size"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Arbitro Casos Arbitro  Arbitro Ref  Casos Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/arbitro/{arbitro_ref}/red":{"get":{"summary":"Arbitro Red","description":"Grafo de relaciones del árbitro con sus co-árbitros.\n\nDevuelve nodes (incluye al árbitro central + top co-árbitros por n_shared)\ny edges (peso = n_casos compartidos).","operationId":"arbitro_red_arbitro__arbitro_ref__red_get","parameters":[{"name":"arbitro_ref","in":"path","required":true,"schema":{"type":"string","title":"Arbitro Ref"}},{"name":"max_nodes","in":"query","required":false,"schema":{"type":"integer","default":40,"title":"Max Nodes"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Arbitro Red Arbitro  Arbitro Ref  Red Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/arbitro/{arbitro_ref}/stats":{"get":{"summary":"Arbitro Stats","description":"Stats per-árbitro: período de actividad + cuantías medianas.\n\n- primer_año / ultimo_año: MIN/MAX(año) en corpus_arbitros_decisions.\n- mediana_pretendida_cop / mediana_concedida_cop: medianas post-clamp\n  a < 1e13 COP (canon Sprint 22 · B1, descarta outliers de unidad mal\n  parseados).\n- ratio_mediano_concedida_pretendida: mediana_conc / mediana_pret, sólo\n  si ambas existen y mediana_pret > 0.\n- n_con_pretendida / n_con_concedida: counts denominadores transparentes.\n\nComparación implícita en frontend con cifras canónicas del corpus.","operationId":"arbitro_stats_arbitro__arbitro_ref__stats_get","parameters":[{"name":"arbitro_ref","in":"path","required":true,"schema":{"type":"string","title":"Arbitro Ref"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Arbitro Stats Arbitro  Arbitro Ref  Stats Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/arbitro/{arbitro_ref}/apoderados-frecuentes":{"get":{"summary":"Arbitro Apoderados Frecuentes","description":"Top apoderados (personas reales) que aparecen en casos del árbitro.\n\nUsa v_apoderados_persona_real (Sprint 22 · C2) para excluir fragmentos\nNER. Fallback a corpus_apoderados raw si la VIEW no existe.\n\nSQL agregada:\n    SELECT nombre_v2, COUNT(DISTINCT caso_id||source) AS n_casos\n    FROM v_apoderados_persona_real ap\n    JOIN corpus_arbitros_decisions d\n      ON ap.caso_id = d.caso_id AND ap.source = d.source\n    WHERE d.arbitro_id = ?\n    GROUP BY 1 ORDER BY 2 DESC LIMIT ?\n\nConsideración ética (B2): NO etiqueta tendencia decisoria pro-X. Sólo\ndevuelve counts crudos.","operationId":"arbitro_apoderados_frecuentes_arbitro__arbitro_ref__apoderados_frecuentes_get","parameters":[{"name":"arbitro_ref","in":"path","required":true,"schema":{"type":"string","title":"Arbitro Ref"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":5,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Arbitro Apoderados Frecuentes Arbitro  Arbitro Ref  Apoderados Frecuentes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/arbitro/{arbitro_ref}/partes-frecuentes":{"get":{"summary":"Arbitro Partes Frecuentes","description":"Top partes recurrentes en casos del árbitro: convocantes y convocadas.\n\nDevuelve dos listas separadas (no agregadas) para reflejar el rol crudo\nen cada caso, sin inferir tendencia decisoria (consideración ética B2).\n\nFuente: corpus_meta.convocante / convocada (raw), join contra\ncorpus_arbitros_decisions por (caso_id, source).","operationId":"arbitro_partes_frecuentes_arbitro__arbitro_ref__partes_frecuentes_get","parameters":[{"name":"arbitro_ref","in":"path","required":true,"schema":{"type":"string","title":"Arbitro Ref"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":5,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Arbitro Partes Frecuentes Arbitro  Arbitro Ref  Partes Frecuentes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/arbitro/{arbitro_ref}/conflict-check":{"get":{"summary":"Arbitro Conflict Check","description":"Verifica si el árbitro tiene casos previos con la entidad ``query``.\n\n``query`` puede ser parte (convocante/convocada), apoderado o firma legal.\nDevuelve cuenta + breakdown por tipo de match para que el widget inline\nmuestre \"0 casos previos\" (verde) o \"X casos previos con esta entidad\"\n(amber/rojo) sin abrir el wizard completo de /conflict-check.\n\nSin etiqueta de tendencia decisoria (consideración ética B2).","operationId":"arbitro_conflict_check_arbitro__arbitro_ref__conflict_check_get","parameters":[{"name":"arbitro_ref","in":"path","required":true,"schema":{"type":"string","title":"Arbitro Ref"}},{"name":"query","in":"query","required":true,"schema":{"type":"string","title":"Query"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Arbitro Conflict Check Arbitro  Arbitro Ref  Conflict Check Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/arbitro/{arbitro_ref}/anulaciones":{"get":{"summary":"Arbitro Anulaciones","description":"Detalle de cada laudo del árbitro que pasó por anulación ante CE.\n\nDevuelve laudo original (título, partes, año, source) + providencia CE\n(caso_id, decisión: anula|confirma|otro, año).","operationId":"arbitro_anulaciones_arbitro__arbitro_ref__anulaciones_get","parameters":[{"name":"arbitro_ref","in":"path","required":true,"schema":{"type":"string","title":"Arbitro Ref"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Arbitro Anulaciones Arbitro  Arbitro Ref  Anulaciones Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/arbitro/{arbitro_ref}/timeline":{"get":{"summary":"Arbitro Timeline","description":"Distribución de casos por año, con desglose materia + decisión.\n\nSirve al chart cronológico del track record. Para cada año donde el\nárbitro tiene >= 1 laudo: n_casos, materias (dict count) y decisiones\n(dict count). Materias 'sin_materia' / decisiones nulas se agrupan\nbajo 'sin_clasificar' para que el chart no rompa.","operationId":"arbitro_timeline_arbitro__arbitro_ref__timeline_get","parameters":[{"name":"arbitro_ref","in":"path","required":true,"schema":{"type":"string","title":"Arbitro Ref"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Arbitro Timeline Arbitro  Arbitro Ref  Timeline Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/arbitro/{arbitro_ref}/cuantias-distribution":{"get":{"summary":"Arbitro Cuantias Distribution","description":"Percentiles p25/p50/p75/p95/max de cuantías pretendidas y concedidas.\n\nAplica caps canónicos (descarta >= 10 billones COP y < 1 millón COP).\nLee de corpus_meta_v2 (post-Sprint 24 C2, ya validado por LLM).\nDevuelve también los outliers fuera del rango canónico para que la\nUI los pueda enumerar (no como cifras agregadas).","operationId":"arbitro_cuantias_distribution_arbitro__arbitro_ref__cuantias_distribution_get","parameters":[{"name":"arbitro_ref","in":"path","required":true,"schema":{"type":"string","title":"Arbitro Ref"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Arbitro Cuantias Distribution Arbitro  Arbitro Ref  Cuantias Distribution Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/arbitro/{arbitro_ref}/duracion-distribution":{"get":{"summary":"Arbitro Duracion Distribution","description":"Percentiles y histograma de duración del tribunal (en meses).\n\nBuckets: 0-6, 6-12, 12-24, 24-36, 36-60, 60+ meses.\nExcluye duraciones <= 0 o > 240 (cap canónico).","operationId":"arbitro_duracion_distribution_arbitro__arbitro_ref__duracion_distribution_get","parameters":[{"name":"arbitro_ref","in":"path","required":true,"schema":{"type":"string","title":"Arbitro Ref"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Arbitro Duracion Distribution Arbitro  Arbitro Ref  Duracion Distribution Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/arbitro/{arbitro_ref}/sesgo-decisional":{"get":{"summary":"Arbitro Sesgo Decisional","description":"Distribución decisional del árbitro vs baseline del corpus.\n\nCalcula la frecuencia relativa de cada categoría decisional\n(favorable_convocante, favorable_convocada, mixto, rechazo_total,\notro, sin_clasificar) para el árbitro y compara contra el corpus\nglobal. Detecta sesgo significativo con test chi-cuadrado (p<0.05).","operationId":"arbitro_sesgo_decisional_arbitro__arbitro_ref__sesgo_decisional_get","parameters":[{"name":"arbitro_ref","in":"path","required":true,"schema":{"type":"string","title":"Arbitro Ref"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Arbitro Sesgo Decisional Arbitro  Arbitro Ref  Sesgo Decisional Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/arbitro/{arbitro_ref}/materias-heatmap":{"get":{"summary":"Arbitro Materias Heatmap","description":"Heatmap materia × año: cuántos laudos por celda (materia, año).\n\nCells solo incluye celdas con count > 0 (sparse).","operationId":"arbitro_materias_heatmap_arbitro__arbitro_ref__materias_heatmap_get","parameters":[{"name":"arbitro_ref","in":"path","required":true,"schema":{"type":"string","title":"Arbitro Ref"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Arbitro Materias Heatmap Arbitro  Arbitro Ref  Materias Heatmap Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/arbitro/{arbitro_ref}/camaras-distribution":{"get":{"summary":"Arbitro Camaras Distribution","description":"Distribución de casos por cámara/centro (source), con período activo.\n\nÚtil para mostrar dónde tiene track record el árbitro: ccb/ccm/ccc/cart/intl.","operationId":"arbitro_camaras_distribution_arbitro__arbitro_ref__camaras_distribution_get","parameters":[{"name":"arbitro_ref","in":"path","required":true,"schema":{"type":"string","title":"Arbitro Ref"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Arbitro Camaras Distribution Arbitro  Arbitro Ref  Camaras Distribution Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/arbitro/{arbitro_ref}/geo":{"get":{"summary":"Arbitro Geo","description":"Centro de gravedad geográfico del árbitro (por cámara → ciudad).\n\nComo las cámaras de comercio están atadas a ciudades, derivamos la\ndistribución geográfica del campo `source`. Si en el futuro hay\n`ciudad_audiencia` en corpus_meta_v2, se puede refinar.","operationId":"arbitro_geo_arbitro__arbitro_ref__geo_get","parameters":[{"name":"arbitro_ref","in":"path","required":true,"schema":{"type":"string","title":"Arbitro Ref"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Arbitro Geo Arbitro  Arbitro Ref  Geo Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/arbitro/{arbitro_ref}/comparativo":{"get":{"summary":"Arbitro Comparativo","description":"Compara métricas del árbitro vs baseline del corpus.\n\nÚtil para responder \"¿es este árbitro más/menos rápido que el promedio?\",\n\"¿concede más o menos que el promedio en su materia top?\".","operationId":"arbitro_comparativo_arbitro__arbitro_ref__comparativo_get","parameters":[{"name":"arbitro_ref","in":"path","required":true,"schema":{"type":"string","title":"Arbitro Ref"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Arbitro Comparativo Arbitro  Arbitro Ref  Comparativo Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/arbitro/{arbitro_ref}/claim":{"post":{"summary":"Arbitro Claim","description":"Recibe una solicitud de claim o corrección desde el UI público.\n\nNO requiere auth (el árbitro real probablemente no tiene cuenta aún).\nLa verificación posterior es manual por el equipo, validando\n`url_verificable` y `email`. Devuelve `ticket_id` para que el solicitante\npueda hacer seguimiento.","operationId":"arbitro_claim_arbitro__arbitro_ref__claim_post","parameters":[{"name":"arbitro_ref","in":"path","required":true,"schema":{"type":"string","title":"Arbitro Ref"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ArbitroClaimRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Arbitro Claim Arbitro  Arbitro Ref  Claim Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/arbitros/claims":{"get":{"summary":"Admin Arbitros Claims","description":"Listado admin de claims/correcciones para revisión.\n\nstatus: pending | verified | rejected | all","operationId":"admin_arbitros_claims_admin_arbitros_claims_get","parameters":[{"name":"status","in":"query","required":false,"schema":{"type":"string","default":"pending","title":"Status"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"x-laudos-admin-token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Laudos-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Admin Arbitros Claims Admin Arbitros Claims Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/arbitros/claims/{ticket_id}/review":{"post":{"summary":"Admin Arbitros Claim Review","description":"Marca un ticket como verificado o rechazado (auditoría humana).","operationId":"admin_arbitros_claim_review_admin_arbitros_claims__ticket_id__review_post","parameters":[{"name":"ticket_id","in":"path","required":true,"schema":{"type":"string","title":"Ticket Id"}},{"name":"x-laudos-admin-token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Laudos-Admin-Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ArbitroClaimReviewRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Admin Arbitros Claim Review Admin Arbitros Claims  Ticket Id  Review Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/metrics/canonical/upsert":{"post":{"summary":"Admin Metrics Canonical Upsert","description":"Inserta o actualiza una métrica canónica (DD-8 §1).\n\nStandard mínimo: nombre, fórmula, fuente, ventana, versión, owner,\ndisclaimer y URL pública `/metodologia/{slug}`. Sin esto, la métrica\nNO se publica en UI.","operationId":"admin_metrics_canonical_upsert_admin_metrics_canonical_upsert_post","parameters":[{"name":"x-laudos-admin-token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Laudos-Admin-Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MetricaCanonicaUpsert"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Admin Metrics Canonical Upsert Admin Metrics Canonical Upsert Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/metrics/canonical":{"get":{"summary":"Admin Metrics Canonical List","description":"Listado admin de métricas canónicas registradas.","operationId":"admin_metrics_canonical_list_admin_metrics_canonical_get","parameters":[{"name":"x-laudos-admin-token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Laudos-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Admin Metrics Canonical List Admin Metrics Canonical Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/metodologia/{nombre_canonico}":{"get":{"summary":"Public Metodologia","description":"Endpoint público — devuelve la ficha de metodología de una métrica.\n\nConsumido por el frontend en `/metodologia/{slug}` (RSC, indexable).","operationId":"public_metodologia_metodologia__nombre_canonico__get","parameters":[{"name":"nombre_canonico","in":"path","required":true,"schema":{"type":"string","title":"Nombre Canonico"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Public Metodologia Metodologia  Nombre Canonico  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/llm-audit":{"post":{"summary":"Admin Llm Audit Record","description":"Registra una salida LLM en `llm_outputs_audit` (DD-8 §6).\n\nToda feature LLM debe llamar este endpoint tras generar output —\nrequisito del Gate pre-release.","operationId":"admin_llm_audit_record_admin_llm_audit_post","parameters":[{"name":"x-laudos-admin-token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Laudos-Admin-Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LLMAuditEntry"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Admin Llm Audit Record Admin Llm Audit Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"summary":"Admin Llm Audit List","description":"Lista entradas de auditoría LLM con filtros opcionales.","operationId":"admin_llm_audit_list_admin_llm_audit_get","parameters":[{"name":"feature","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Feature"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"user_reported_only","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"User Reported Only"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"x-laudos-admin-token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Laudos-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Admin Llm Audit List Admin Llm Audit Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/llm-audit/{audit_id}/spot-check":{"post":{"summary":"Admin Llm Audit Spot Check","description":"Marca una entrada de auditoría como spot-checked por reviewer.","operationId":"admin_llm_audit_spot_check_admin_llm_audit__audit_id__spot_check_post","parameters":[{"name":"audit_id","in":"path","required":true,"schema":{"type":"string","title":"Audit Id"}},{"name":"x-laudos-admin-token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Laudos-Admin-Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LLMAuditSpotCheck"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Admin Llm Audit Spot Check Admin Llm Audit  Audit Id  Spot Check Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/arbitro/{arbitro_ref}/iba-disclosure":{"post":{"summary":"Arbitro Iba Disclosure","description":"Pre-flight IBA Orange List + UNCITRAL Code disclosure (DD-5).\n\nInput: partes + counsel + centro del caso candidato.\nOutput: triggers activos con n_appts + evidence + disclosure text,\nOrange Score [0,100] con band Green→Critical, summary y disclaimer.\n\nEl motor cubre 3.1.3, 3.2.8 y 3.4.3 automatizables hoy. Otros\nrequieren OSINT externo o el checklist B (respondido por árbitro).","operationId":"arbitro_iba_disclosure_arbitro__arbitro_ref__iba_disclosure_post","parameters":[{"name":"arbitro_ref","in":"path","required":true,"schema":{"type":"string","title":"Arbitro Ref"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PreflightRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Arbitro Iba Disclosure Arbitro  Arbitro Ref  Iba Disclosure Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/arbitros/iba-pool-stats":{"get":{"summary":"Arbitros Iba Pool Stats","description":"Estadísticas agregadas del pool — métrica madre para deck B2B.\n\nCuántos árbitros activos (último 36m) tienen al menos un trigger\nOrange computable (3.1.3 partes o 3.2.8 counsel) lifetime — proxy\nde la cifra \"13.4% / 18.21%\" del DD-5 + S0.2 bridge CCB.","operationId":"arbitros_iba_pool_stats_arbitros_iba_pool_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Arbitros Iba Pool Stats Arbitros Iba Pool Stats Get"}}}}}}},"/constitucional-watch/feed":{"get":{"summary":"Constitucional Watch Feed","description":"Feed paginado de tutelas/sentencias vs laudos.\n\nFiltros opcionales: band ∈ {concedida, negada, improcedente, otro},\ncentro (arbitral), desde (fecha YYYY-MM-DD).","operationId":"constitucional_watch_feed_constitucional_watch_feed_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}},{"name":"band","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Band"}},{"name":"centro","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Centro"}},{"name":"desde","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Desde"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Constitucional Watch Feed Constitucional Watch Feed Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/constitucional-watch/stats":{"get":{"summary":"Constitucional Watch Stats","description":"Estadísticas agregadas: tasa éxito + breakdown por sala/causal/centro/año.","operationId":"constitucional_watch_stats_constitucional_watch_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Constitucional Watch Stats Constitucional Watch Stats Get"}}}}}}},"/arbitro/{arbitro_ref}/constitucional-watch":{"get":{"summary":"Arbitro Constitucional Watch","description":"Sentencias constitucionales que mencionan a este árbitro.\n\nDos vías:\n  - laudo_id_match → si la sentencia ataca un laudo donde el árbitro\n    participó (vía corpus_arbitros_decisions).\n  - arbitros_en_tutelas → si el árbitro aparece nombrado directamente\n    en el texto de la sentencia (parsed durante seed).","operationId":"arbitro_constitucional_watch_arbitro__arbitro_ref__constitucional_watch_get","parameters":[{"name":"arbitro_ref","in":"path","required":true,"schema":{"type":"string","title":"Arbitro Ref"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Arbitro Constitucional Watch Arbitro  Arbitro Ref  Constitucional Watch Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/constitucional-watch/import":{"post":{"summary":"Admin Cw Import","description":"Bulk UPSERT de tutelas_vs_laudos desde pipeline Socrata.","operationId":"admin_cw_import_admin_constitucional_watch_import_post","parameters":[{"name":"x-laudos-admin-token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Laudos-Admin-Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CWImportRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Admin Cw Import Admin Constitucional Watch Import Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/arbitro/{arbitro_ref}/ranking-position":{"get":{"summary":"Arbitro Ranking Position","description":"Posición del árbitro en rankings nacionales por varias métricas.\n\nPara cada métrica, calcula la posición del árbitro vs todos los\nárbitros con `n_laudos >= 3` (mismo filtro que /arbitros/ranking).\nDevuelve un tier ('top_10' | 'top_50' | 'top_100' | 'top_500' | 'fuera').","operationId":"arbitro_ranking_position_arbitro__arbitro_ref__ranking_position_get","parameters":[{"name":"arbitro_ref","in":"path","required":true,"schema":{"type":"string","title":"Arbitro Ref"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Arbitro Ranking Position Arbitro  Arbitro Ref  Ranking Position Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/arbitro/{arbitro_ref}/casos-hito":{"get":{"summary":"Arbitro Casos Hito","description":"Casos record del árbitro: extremos en cuantía, duración, ratio.\n\nDevuelve hasta 5 casos hito (uno por categoría). Si no hay cuantía o\nduración suficiente, omite la categoría.","operationId":"arbitro_casos_hito_arbitro__arbitro_ref__casos_hito_get","parameters":[{"name":"arbitro_ref","in":"path","required":true,"schema":{"type":"string","title":"Arbitro Ref"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Arbitro Casos Hito Arbitro  Arbitro Ref  Casos Hito Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/arbitro/{arbitro_ref}/sectores-economicos":{"get":{"summary":"Arbitro Sectores Economicos","description":"Tasa de éxito del árbitro por sector económico (materia).\n\nPara cada sector con >=3 casos del árbitro: n_laudos, % del corpus\ndel árbitro en ese sector, tasa_favorable_convocante, y baseline\ndel corpus completo en el mismo sector.","operationId":"arbitro_sectores_economicos_arbitro__arbitro_ref__sectores_economicos_get","parameters":[{"name":"arbitro_ref","in":"path","required":true,"schema":{"type":"string","title":"Arbitro Ref"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Arbitro Sectores Economicos Arbitro  Arbitro Ref  Sectores Economicos Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/arbitro/{arbitro_ref}/radar-metrics":{"get":{"summary":"Arbitro Radar Metrics","description":"5 dimensiones normalizadas (0-100) para radar chart comparativo.\n\nDimensiones:\n- rapidez: 100 = mucho más rápido que corpus baseline\n- severidad: 100 = mucho más favorable_convocante que corpus\n- equilibrio: 100 = ratio fav/desfav cerca de 50/50 (señal de balance)\n- especializacion: 100 = concentración alta en una materia top\n- productividad: 100 = muchos laudos/año activo vs corpus","operationId":"arbitro_radar_metrics_arbitro__arbitro_ref__radar_metrics_get","parameters":[{"name":"arbitro_ref","in":"path","required":true,"schema":{"type":"string","title":"Arbitro Ref"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Arbitro Radar Metrics Arbitro  Arbitro Ref  Radar Metrics Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/arbitro/{arbitro_ref}/salvamentos":{"get":{"summary":"Arbitro Salvamentos","description":"Salvamentos y aclaraciones de voto emitidos por este árbitro.\n\nIndica independencia decisional: cuántas veces el árbitro discrepó\nde la mayoría del tribunal. Cruza el `canonical` del árbitro contra\n`autor_arbitro` (v2) o `arbitro_autor` (v1 legacy) usando LIKE\ncase-insensitive (puede tener falsos negativos por aliases).\n\nDevuelve items con caso_id, tipo (salvamento|aclaracion), tema,\nrazones, fragmento_clave + un summary con n_salv / n_acla.","operationId":"arbitro_salvamentos_arbitro__arbitro_ref__salvamentos_get","parameters":[{"name":"arbitro_ref","in":"path","required":true,"schema":{"type":"string","title":"Arbitro Ref"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Arbitro Salvamentos Arbitro  Arbitro Ref  Salvamentos Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/arbitros/{arbitro_ref}/bio-source":{"post":{"summary":"Admin Arbitros Bio Source Add","description":"Inserta una nueva bio source con audit trail.\n\nREGLA ANTI-ALUCINACIÓN: cada llamada DEBE traer source_url verificable.\nEl equipo (o el script automatizado con disciplina) garantiza que\n`valor_resumen` aparece textualmente en la fuente. La validación\npost-LLM se hace ANTES de llegar a este endpoint.","operationId":"admin_arbitros_bio_source_add_admin_arbitros__arbitro_ref__bio_source_post","parameters":[{"name":"arbitro_ref","in":"path","required":true,"schema":{"type":"string","title":"Arbitro Ref"}},{"name":"x-laudos-admin-token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Laudos-Admin-Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BioSourceRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Admin Arbitros Bio Source Add Admin Arbitros  Arbitro Ref  Bio Source Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/arbitro/{arbitro_ref}/bio-sources":{"get":{"summary":"Arbitro Bio Sources","description":"Devuelve TODAS las bio sources del árbitro (público).\n\nCada fila incluye `source_url` trazable + confidence + flags de\nverificación. La UI muestra badges al lado de cada campo con\nlink clickeable a la fuente.","operationId":"arbitro_bio_sources_arbitro__arbitro_ref__bio_sources_get","parameters":[{"name":"arbitro_ref","in":"path","required":true,"schema":{"type":"string","title":"Arbitro Ref"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Arbitro Bio Sources Arbitro  Arbitro Ref  Bio Sources Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/arbitros/bio-sources/{source_id}/verify":{"post":{"summary":"Admin Arbitros Bio Source Verify","description":"Marca una bio source como verificada por equipo o por el árbitro.","operationId":"admin_arbitros_bio_source_verify_admin_arbitros_bio_sources__source_id__verify_post","parameters":[{"name":"source_id","in":"path","required":true,"schema":{"type":"integer","title":"Source Id"}},{"name":"x-laudos-admin-token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Laudos-Admin-Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BioSourceVerifyRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Admin Arbitros Bio Source Verify Admin Arbitros Bio Sources  Source Id  Verify Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/arbitros/bio-sources/{source_id}":{"delete":{"summary":"Admin Arbitros Bio Source Delete","description":"Elimina una bio source (e.g., información incorrecta reportada).","operationId":"admin_arbitros_bio_source_delete_admin_arbitros_bio_sources__source_id__delete","parameters":[{"name":"source_id","in":"path","required":true,"schema":{"type":"integer","title":"Source Id"}},{"name":"x-laudos-admin-token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Laudos-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Admin Arbitros Bio Source Delete Admin Arbitros Bio Sources  Source Id  Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/arbitros/recommend":{"post":{"summary":"Arbitros Recommend","description":"Recomienda top árbitros para un caso según perfil declarado.\n\nScore = weighted sum de 5 dimensiones (0-100 cada una):\n- experiencia_materia: % casos del árbitro en la materia solicitada\n- eficiencia_duracion: proximidad de su mediana de duración a la pref\n- balance_decisional: cuán alineado está su ratio fav_convocante\n- track_record_general: derivado de n_laudos (cap 50 → 100)\n- sin_anulaciones_recientes: 100 si tasa_anulacion=0, 0 si >5%\n\nNO predice imparcialidad. Solo agrega métricas históricas con explicación.","operationId":"arbitros_recommend_arbitros_recommend_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ArbitroRecommendRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Arbitros Recommend Arbitros Recommend Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/arbitros/ranking":{"get":{"summary":"Arbitros Ranking","description":"Ranking de árbitros por métrica.\n\nby: n_laudos | total_concedido | median_concedido | total_pretendido |\n    median_duracion | tasa_anulacion | ratio_fav_convocante","operationId":"arbitros_ranking_arbitros_ranking_get","parameters":[{"name":"by","in":"query","required":false,"schema":{"type":"string","default":"n_laudos","title":"By"}},{"name":"order","in":"query","required":false,"schema":{"type":"string","default":"desc","title":"Order"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"min_laudos","in":"query","required":false,"schema":{"type":"integer","default":3,"title":"Min Laudos"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Arbitros Ranking Arbitros Ranking Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/laudos/ranking":{"get":{"summary":"Laudos Ranking","description":"Ranking de laudos por cuantías o duración.\n\nby: monto_concedido | monto_pretendido | porcentaje_concedido | duracion_meses","operationId":"laudos_ranking_laudos_ranking_get","parameters":[{"name":"by","in":"query","required":false,"schema":{"type":"string","default":"monto_concedido","title":"By"}},{"name":"order","in":"query","required":false,"schema":{"type":"string","default":"desc","title":"Order"}},{"name":"materia","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Materia"}},{"name":"source","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"}},{"name":"año_min","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Año Min"}},{"name":"año_max","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Año Max"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Laudos Ranking Laudos Ranking Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/laudos":{"get":{"summary":"Laudos Directory","description":"Directorio paginado de laudos con filtros y búsqueda.","operationId":"laudos_directory_laudos_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Q"}},{"name":"source","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"}},{"name":"materia","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Materia"}},{"name":"decision","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Decision"}},{"name":"sede","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sede"}},{"name":"año_min","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Año Min"}},{"name":"año_max","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Año Max"}},{"name":"cuantia_min","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Cuantia Min"}},{"name":"cuantia_max","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Cuantia Max"}},{"name":"anulado","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Anulado"}},{"name":"sort","in":"query","required":false,"schema":{"type":"string","default":"año","title":"Sort"}},{"name":"order","in":"query","required":false,"schema":{"type":"string","default":"desc","title":"Order"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","default":20,"title":"Page Size"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Laudos Directory Laudos Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/laudos/stats":{"get":{"summary":"Laudos Stats","description":"Stats agregadas del corpus de laudos.\n\nSprint 22 · A2 — Fuentes canónicas\n----------------------------------\nEl campo legacy ``n_camaras`` contaba ``COUNT(DISTINCT source)`` entre los\nlaudos arbitrales y devolvía ``5`` mezclando 4 cámaras nacionales reales\n(ccb, ccm, ccc, cart) con el bucket ``intl``. Además excluía cámaras que\naún no publican laudos digitalmente (ccbaq, ccbu, ccp, ccmz, ccsm).\n\nSprint 22 introduce campos desambiguados:\n\n- ``n_camaras_arbitraje_con_laudos`` — cámaras nacionales con laudos.\n- ``n_camaras_arbitraje_totales`` — cámaras nacionales conocidas (9).\n- ``n_arbitrajes_internacionales`` — buckets `intl` (1).\n- ``n_fuentes_con_laudos_arbitrales`` — cámaras + intl (5 actuales).\n- ``fuentes_con_laudos_arbitrales`` — lista ordenada de codes.\n\n``n_camaras`` se preserva como alias deprecated apuntando a\n``n_fuentes_con_laudos_arbitrales`` por retrocompat. Consumidores:\napps/web-next/app/laudos/page.tsx, apps/web-next/app/precedentes/page.tsx.\n\nSprint 22 · B1 — Exponer cifras crudas y canónicas (con outliers excluidos)\npara que la UI pueda mostrar la cifra correcta y/o diferenciar. Canónico =\nexcluir cuantías >= 1e13 COP (10 billones COP en escala larga colombiana,\ncap por país-año).","operationId":"laudos_stats_laudos_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Laudos Stats Laudos Stats Get"}}}}}}},"/laudos/stats/canonical":{"get":{"summary":"Laudos Stats Canonical","description":"Sprint 22 · B2 — Stats canónicas con clasificación desambiguada.\n\nExtiende ``/laudos/stats`` con:\n\n- ``decisiones``: distribución por bucket canónico\n  (favorable_convocante, favorable_convocada, mixto, rechazo_total) +\n  ``otro`` (preservado del original) + ``sin_clasificar`` (NULL).\n  Aplica el mapping ``DECISION_CANONICAL`` definido en\n  ``scripts/sprint22/build_decisiones_anulacion_canonico.py`` para\n  reconciliar las variantes legacy (``prosperan_totalmente``,\n  ``prosperan_parcialmente``, ``no_prosperan``) emitidas por\n  ``corpus_meta.decision``.\n\n- ``anulacion``: 3 estados desambiguados.\n    * ``confirmada``: el recurso de anulación PROSPERÓ. Cruce de\n      ``corpus_anulaciones_v2.anulado=TRUE`` con\n      ``corpus_arbitros_anulaciones.decision_anulacion IN ('anula',\n      'anula_parcial')`` — sólo casos efectivamente mapeados al universo\n      de laudos arbitrales canónicos (no incluye sentencias CE como tales).\n    * ``invocada_no_confirmada``: hubo recurso pero no prosperó\n      (``anulado=FALSE`` o ``NULL`` con ``recurso_interpuesto=TRUE``).\n    * ``ninguna``: el laudo no tiene registro de anulación.\n\n  NOTA: el legacy ``/laudos/stats.n_anulados=60`` mezclaba laudos\n  arbitrales con sentencias CE y otros — sobre el universo canónico real\n  (laudos arbitrales) la cifra corregida es **9 confirmadas** + **30\n  invocadas no confirmadas**.\n\n- ``duracion_meses``: mediana + cuartiles + n_con_dato (sobre laudos\n  canónicos, 2.560).\n- ``sedes_canonicas``: lista única de sedes tras unificar variantes\n  (Bogotá / Bogotá D.C., Washington / Washington D.C.).\n\nUniverso: ``v_corpus_laudos_canonical`` (2.560 laudos tras dedup).\n\nDefiniciones canónicas (decisiones)\n-----------------------------------\nEl mapping de raw → canónico es:\n\n- ``favorable_convocante``: prosperan TODAS las pretensiones del\n  convocante (sin compensación significativa al convocado).\n- ``favorable_convocada``: el tribunal absuelve completamente al\n  convocado / niega todas las pretensiones del convocante con condena\n  al convocante (e.g., reconvención exitosa).\n- ``mixto``: prosperan parcialmente las pretensiones de cada parte.\n- ``rechazo_total``: no prospera ninguna pretensión (≠\n  favorable_convocada porque no implica que el convocado *gane*).","operationId":"laudos_stats_canonical_laudos_stats_canonical_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Laudos Stats Canonical Laudos Stats Canonical Get"}}}}}}},"/corpus/fuentes":{"get":{"summary":"Corpus Fuentes","description":"Sprint 22 · A2 — Devuelve la taxonomía canónica de fuentes del corpus\nenriquecida con conteos dinámicos por fuente.\n\nPara cada fuente reporta:\n- ``n_laudos``: docs en `corpus_meta` con `document_type='laudo'`.\n- ``n_jurisprudencia``: docs en `corpus_meta` con `document_type='jurisprudencia'`\n  (más conteos especiales para CSJ y CC desde tablas dedicadas).\n- ``n_resoluciones``: rows en `corpus_centros_resoluciones`.\n- ``n_doctrina_docs``: documentos doctrina indexados (aplica académico).\n- ``tiene_tarifa_vigente``: bool desde `corpus_centros_tarifas_vigentes`.\n\nMantenido en sincronía con `apps/web-next/lib/centrosCanonical.ts` y\n`data/sprint22/fuentes_canonicas.json`.","operationId":"corpus_fuentes_corpus_fuentes_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Corpus Fuentes Corpus Fuentes Get"}}}}}}},"/corpus/stats/canonical":{"get":{"summary":"Corpus Stats Canonical","description":"Sprint 22 · A1 — Cifras canónicas del corpus.\n\nDevuelve las cifras oficiales del corpus después de la deduplicación\n`(caso_id, source)` aplicada en `v_corpus_laudos_canonical`.\n\nDefiniciones\n------------\n- \"laudos arbitrales\": filas en `corpus_meta` con\n  `document_type IN ('laudo', NULL)` y `source IN (ccb, ccm, ccc, cart, intl)`,\n  tras dedup por `(caso_id, source)` (keep row con mayor fecha_laudo).\n- \"corpus full\": universo `corpus_meta` completo, deduplicado por\n  `(caso_id, source)` — incluye laudos + jurisprudencia CE.\n\nFuentes excluidas de \"laudos\"\n-----------------------------\n- `ce` (2.788 raw): jurisprudencia del Consejo de Estado.\n- `externado` (73 docs, vive solo en `corpus_chunks`): tesis Universidad\n  Externado.\n- `csj`, `cc`: no presentes actualmente en `corpus_meta`.","operationId":"corpus_stats_canonical_corpus_stats_canonical_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Corpus Stats Canonical Corpus Stats Canonical Get"}}}}}}},"/stats/public":{"get":{"summary":"Stats Public","description":"Sprint 22 · D1 — Endpoint canónico unificado de cifras públicas.\n\nDevuelve TODAS las cifras que la UI pública necesita en un único contrato\nestable. Cualquier página del frontend que muestre números agregados del\ncorpus debe leer de aquí en vez de hardcodear o duplicar queries.\n\nSin autenticación (estos números ya son públicos). Cache-Control es\ncontrolado por el proxy Next.js (1h fresh, 24h stale).","operationId":"stats_public_stats_public_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Stats Public Stats Public Get"}}}}}}},"/laudos/materias":{"get":{"summary":"Laudos Materias","description":"Listado de materias con conteos sobre el universo canónico.\n\nSprint 23 · B1 — Antes agregaba contra `corpus_meta_v2` directo, lo que\nincluía filas duplicadas o pertenecientes a sources no-arbitrales (ce,\nexternado, etc.). Ahora restringimos el conteo al universo\n`v_corpus_laudos_canonical` (post-dedup, sólo arbitrales). Fallback al\ncomportamiento legacy si la VIEW no existe.","operationId":"laudos_materias_laudos_materias_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Laudos Materias Laudos Materias Get"}}}}}}},"/laudos/sedes":{"get":{"summary":"Laudos Sedes","description":"Listado de sedes de tribunal con conteos sobre el universo canónico.\n\nSprint 23 · B1 — Antes agregaba contra `corpus_meta_v2` directo (incluye\nfilas no-arbitrales). Ahora preferimos `v_corpus_sedes_canonico` que\nexpone `sede_canonica` (Bogotá/Bogotá D.C. unificado, Washington/\nWashington D.C. unificado) sobre el universo `v_corpus_laudos_canonical`.\nFallback a `corpus_meta_v2` si las VIEWs no existen.","operationId":"laudos_sedes_laudos_sedes_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Laudos Sedes Laudos Sedes Get"}}}}}}},"/laudos/search":{"get":{"summary":"Laudos Search","description":"Autocomplete por título/convocante/convocada/caso_id.","operationId":"laudos_search_laudos_search_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","title":"Q"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":15,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Laudos Search Laudos Search Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/laudo/{caso_id}":{"get":{"summary":"Laudo Detail","description":"Detalle agregado: meta + v2 + árbitros + citas + anulaciones + honorarios.\n\nSprint 23 · B1 — Lee desde `v_corpus_laudos_canonical` (dedup aplicado)\nen lugar de `corpus_meta` directo. Sin la VIEW, casos con dos filas en\n`corpus_meta` (mismo caso_id + source) podían devolver la versión más\nantigua dependiendo del orden físico — la VIEW garantiza la fila con\n`fecha_laudo` más reciente. Fallback transparente a `corpus_meta`.","operationId":"laudo_detail_laudo__caso_id__get","parameters":[{"name":"caso_id","in":"path","required":true,"schema":{"type":"string","title":"Caso Id"}},{"name":"source","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Laudo Detail Laudo  Caso Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/precedentes":{"get":{"summary":"Precedentes Search","description":"Búsqueda de precedentes filtrada por estándares jurídicos, materia, outcome, cuantía.\n\nMulti-value vía comma o pipe:\n  - estandares=equilibrio_economico,kompetenz_kompetenz\n  - outcome=favorable_convocante,mixto\n  - materias=obra_publica,concesion\n  - sedes=bogota,medellin\nSort: year_desc | year_asc | amount_desc | amount_asc | standards_desc | relevance","operationId":"precedentes_search_precedentes_get","parameters":[{"name":"materia","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Materia"}},{"name":"materias","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Materias"}},{"name":"estandar","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Estandar"}},{"name":"estandares","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Estandares"}},{"name":"decision","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Decision"}},{"name":"outcome","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Outcome"}},{"name":"sede","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sede"}},{"name":"sedes","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sedes"}},{"name":"sources","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sources"}},{"name":"año_min","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Año Min"}},{"name":"año_max","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Año Max"}},{"name":"cuantia_min","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Cuantia Min"}},{"name":"cuantia_max","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Cuantia Max"}},{"name":"anulado","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Anulado"}},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Q"}},{"name":"sort","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sort"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Precedentes Search Precedentes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/precedentes/estandares":{"get":{"summary":"Precedentes Top Estandares","description":"Top estándares jurisprudenciales aplicados en el corpus.","operationId":"precedentes_top_estandares_precedentes_estandares_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Precedentes Top Estandares Precedentes Estandares Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/precedentes/featured":{"get":{"summary":"Precedentes Featured","description":"Precedentes destacados: casos recientes con muchos estándares aplicados.","operationId":"precedentes_featured_precedentes_featured_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":5,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Precedentes Featured Precedentes Featured Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/precedentes/cite/{caso_id}":{"get":{"summary":"Precedentes Cite","description":"Cita formateada en 5 estilos (APA, jurídico colombiano, Chicago, MLA, BibTeX).","operationId":"precedentes_cite_precedentes_cite__caso_id__get","parameters":[{"name":"caso_id","in":"path","required":true,"schema":{"type":"string","title":"Caso Id"}},{"name":"source","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Precedentes Cite Precedentes Cite  Caso Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/materia/{materia}/stats":{"get":{"summary":"Materia Stats","description":"Deep-dive stats por materia: cobertura, cuantías, duración, anulación, top estándares.","operationId":"materia_stats_materia__materia__stats_get","parameters":[{"name":"materia","in":"path","required":true,"schema":{"type":"string","title":"Materia"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Materia Stats Materia  Materia  Stats Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/conflict":{"get":{"summary":"Conflict Check","description":"Conflict check: busca nombre en árbitros, apoderados, partes.\n\ntipo: arbitro | apoderado | parte | firma | None (busca en todos)","operationId":"conflict_check_conflict_get","parameters":[{"name":"nombre","in":"query","required":true,"schema":{"type":"string","title":"Nombre"}},{"name":"tipo","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tipo"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Conflict Check Conflict Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/disclosure/check":{"post":{"summary":"Disclosure Check","description":"Auto-check para wizard de Disclosure Helper.\n\nRecibe nombre del árbitro nominado y entidades del proceso (partes,\napoderados, firmas). Devuelve, por cada entidad, cuántos casos del corpus\ninvolucran al árbitro junto a esa entidad (track record cruzado).\n\nSirve como alerta amarilla en el wizard: \"Detectamos N casos previos con\nesta parte\". No reemplaza el juicio profesional del árbitro; es asistencia.\n\nCache TTL 5 min sobre clave determinística (arbitro + sorted entities).","operationId":"disclosure_check_disclosure_check_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DisclosureCheckRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DisclosureCheckResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/firma/{firma}/stats":{"get":{"summary":"Firma Stats","description":"Stats por firma legal: casos, abogados, materias, sedes, outcomes.","operationId":"firma_stats_firma__firma__stats_get","parameters":[{"name":"firma","in":"path","required":true,"schema":{"type":"string","title":"Firma"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Firma Stats Firma  Firma  Stats Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/centro/{centro}/arbitros":{"get":{"summary":"Centro Arbitros Oficiales","description":"Lista oficial de árbitros del centro (scraped de sitio oficial).","operationId":"centro_arbitros_oficiales_centro__centro__arbitros_get","parameters":[{"name":"centro","in":"path","required":true,"schema":{"type":"string","title":"Centro"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":500,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Centro Arbitros Oficiales Centro  Centro  Arbitros Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/centros/arbitros/stats":{"get":{"summary":"Centros Arbitros Stats","description":"Stats agregadas por centro.","operationId":"centros_arbitros_stats_centros_arbitros_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Centros Arbitros Stats Centros Arbitros Stats Get"}}}}}}},"/predictor/info":{"get":{"summary":"Predictor Info","description":"Status de modelos predictivos disponibles.","operationId":"predictor_info_predictor_info_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Predictor Info Predictor Info Get"}}}}}}},"/predictor/laudo/{caso_id}":{"get":{"summary":"Predictor Para Caso","description":"Predicción de outcome+cuantía+duración para un caso del corpus.\n\nUsa features del caso si está en corpus_meta_v2; si no, retorna error.","operationId":"predictor_para_caso_predictor_laudo__caso_id__get","parameters":[{"name":"caso_id","in":"path","required":true,"schema":{"type":"string","title":"Caso Id"}},{"name":"source","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Predictor Para Caso Predictor Laudo  Caso Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/centro/{centro}/dashboard":{"get":{"summary":"Centro Dashboard","description":"Dashboard institucional completo de una cámara de comercio.","operationId":"centro_dashboard_centro__centro__dashboard_get","parameters":[{"name":"centro","in":"path","required":true,"schema":{"type":"string","title":"Centro"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Centro Dashboard Centro  Centro  Dashboard Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/centros/comparar":{"get":{"summary":"Centros Comparar","description":"Benchmark inter-centros.","operationId":"centros_comparar_centros_comparar_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Centros Comparar Centros Comparar Get"}}}}}}},"/centro/{centro}/anulaciones":{"get":{"summary":"Centro Anulaciones Detail","description":"Detalle anulaciones CE de laudos del centro.","operationId":"centro_anulaciones_detail_centro__centro__anulaciones_get","parameters":[{"name":"centro","in":"path","required":true,"schema":{"type":"string","title":"Centro"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Centro Anulaciones Detail Centro  Centro  Anulaciones Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/centro/{centro}/tarifario":{"get":{"summary":"Centro Tarifario","description":"Benchmark honorarios por bucket cuantía y materia.","operationId":"centro_tarifario_centro__centro__tarifario_get","parameters":[{"name":"centro","in":"path","required":true,"schema":{"type":"string","title":"Centro"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Centro Tarifario Centro  Centro  Tarifario Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sector/{sector}/dossier":{"get":{"summary":"Sector Dossier","operationId":"sector_dossier_sector__sector__dossier_get","parameters":[{"name":"sector","in":"path","required":true,"schema":{"type":"string","title":"Sector"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sectores/disponibles":{"get":{"summary":"Sectores Disponibles","operationId":"sectores_disponibles_sectores_disponibles_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/diag/tables":{"get":{"summary":"Diag Tables","operationId":"diag_tables_diag_tables_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/anti-fraud/signals":{"get":{"summary":"Anti Fraud Signals","operationId":"anti_fraud_signals_anti_fraud_signals_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/clausulas-modelo":{"get":{"summary":"Clausulas Modelo","operationId":"clausulas_modelo_clausulas_modelo_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/actas-modelo":{"get":{"summary":"Actas Modelo List","description":"Lista de 10 actas modelo (resumen, sin plantillas completas).\n\nDevuelve cada acta con: id, titulo, tipo, ref_legal, descripcion,\nduracion estimada, número de pasos y de advertencias. Para obtener la\nplantilla en markdown y la estructura completa usar /actas-modelo/{id}.","operationId":"actas_modelo_list_actas_modelo_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Actas Modelo List Actas Modelo Get"}}}}}}},"/actas-modelo/{acta_id}":{"get":{"summary":"Actas Modelo Detail","description":"Detalle completo de un acta modelo (incluye plantilla markdown editable).","operationId":"actas_modelo_detail_actas_modelo__acta_id__get","parameters":[{"name":"acta_id","in":"path","required":true,"schema":{"type":"string","title":"Acta Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Actas Modelo Detail Actas Modelo  Acta Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/autos-modelo":{"get":{"summary":"Autos Modelo List","description":"Lista de 10 autos interlocutorios modelo (resumen, sin plantillas completas).\n\nDevuelve cada auto con: id, titulo, tipo, ref_legal, descripcion,\nduracion estimada, número de pasos y de advertencias. Para obtener la\nplantilla en markdown y la estructura completa usar /autos-modelo/{id}.","operationId":"autos_modelo_list_autos_modelo_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Autos Modelo List Autos Modelo Get"}}}}}}},"/autos-modelo/{auto_id}":{"get":{"summary":"Autos Modelo Detail","description":"Detalle completo de un auto modelo (incluye plantilla markdown editable).","operationId":"autos_modelo_detail_autos_modelo__auto_id__get","parameters":[{"name":"auto_id","in":"path","required":true,"schema":{"type":"string","title":"Auto Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Autos Modelo Detail Autos Modelo  Auto Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/outlines-laudo":{"get":{"summary":"Outlines Laudo List","description":"Listado de las 10 materias top con outline de laudo curado.\n\nCada entrada incluye resumen y conteos (secciones, elementos\nobligatorios/recomendados, normas, advertencias) para construir la\nlista sin descargar los 10 outlines completos. Para el detalle de\nuna materia, usar /outlines-laudo/{materia}.","operationId":"outlines_laudo_list_outlines_laudo_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Outlines Laudo List Outlines Laudo Get"}}}}}}},"/outlines-laudo/{materia}":{"get":{"summary":"Outlines Laudo Detail","description":"Outline completo de laudo para una materia top-10.\n\nDevuelve secciones canónicas con elementos obligatorios y recomendados,\nestándares aplicables, normas clave, casos emblemáticos y advertencias\nde anulación específicas. El frontend lo renderiza como estructura\nmental editable y permite generar plantilla markdown.","operationId":"outlines_laudo_detail_outlines_laudo__materia__get","parameters":[{"name":"materia","in":"path","required":true,"schema":{"type":"string","title":"Materia"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Outlines Laudo Detail Outlines Laudo  Materia  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/doctrina/estandares":{"get":{"summary":"Doctrina Estandares List","description":"Lista resumen de los 20 estándares jurisprudenciales curados.\n\nCada estándar incluye id, label, definición corta, cuenta de normas /\njurisprudencia / doctrina, tags y un contador de casos del corpus\ndonde se aplicó (n_casos_corpus).","operationId":"doctrina_estandares_list_doctrina_estandares_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Doctrina Estandares List Doctrina Estandares Get"}}}}}}},"/doctrina/estandares/{estandar_id}":{"get":{"summary":"Doctrina Estandar Detail","description":"Detalle completo de un estándar: definición canónica, normas, jurisprudencia,\ndoctrina, citas formateadas y casos del corpus donde se aplicó.","operationId":"doctrina_estandar_detail_doctrina_estandares__estandar_id__get","parameters":[{"name":"estandar_id","in":"path","required":true,"schema":{"type":"string","title":"Estandar Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Doctrina Estandar Detail Doctrina Estandares  Estandar Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/doctrina/buscar":{"get":{"summary":"Doctrina Buscar","description":"Búsqueda full-text en los 20 estándares.\n\nBusca el término en: id, label, definición canónica, definición corta,\ntags, normas y jurisprudencia. Insensible a tildes y mayúsculas.\nRanking simple por número de campos donde aparece el término.","operationId":"doctrina_buscar_doctrina_buscar_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"type":"string","default":"","title":"Q"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Doctrina Buscar Doctrina Buscar Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/network/graph":{"get":{"summary":"Network Graph","operationId":"network_graph_network_graph_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/citation/graph":{"get":{"summary":"Citation Graph","operationId":"citation_graph_citation_graph_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/graphs/citation":{"get":{"summary":"Graphs Citation","description":"Citation graph reducido para visualización pública (cache 24h).\n\n- `top`: máximo de nodos a devolver (default 200, clamp [10, 1000]).\nSelecciona los top nodos por degree total y devuelve sólo las aristas\nentre ellos. Recalcula stats sobre el subgrafo.","operationId":"graphs_citation_graphs_citation_get","parameters":[{"name":"top","in":"query","required":false,"schema":{"type":"integer","default":200,"title":"Top"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/brief-generator":{"post":{"summary":"Brief Generator","description":"AI assistant para redactar borradores jurídicos arbitrales (demanda,\ncontestación, alegato, recusación, liquidación). Usa RAG sobre el corpus\nde laudos para informar el estilo y precedentes.","operationId":"brief_generator_brief_generator_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BriefRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BriefResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/brief/templates":{"get":{"summary":"Brief Templates List","operationId":"brief_templates_list_brief_templates_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Brief Templates List Brief Templates Get"}}}}}}},"/brief/templates/{template_id}":{"get":{"summary":"Brief Template Detail","operationId":"brief_template_detail_brief_templates__template_id__get","parameters":[{"name":"template_id","in":"path","required":true,"schema":{"type":"string","title":"Template Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Brief Template Detail Brief Templates  Template Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/brief/generate":{"post":{"summary":"Brief Generate V2","description":"Brief por template o modo Custom. Output estructurado + citas verificadas.","operationId":"brief_generate_v2_brief_generate_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BriefV2Request"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BriefV2Response"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/brief/regenerate-section":{"post":{"summary":"Brief Regenerate Section","description":"Re-genera una sola sección manteniendo coherencia con las demás.","operationId":"brief_regenerate_section_brief_regenerate_section_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BriefRegenSectionRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BriefRegenSectionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/lab/simular-tribunal":{"post":{"summary":"Lab Simular Tribunal","description":"Sprint 10 — predicción ajustada por composición del panel arbitral.\n\nPipeline:\n  1. Valida árbitros contra view_arbitros_track_record (HTTP 404 si no existe).\n  2. Stats individuales por árbitro (track-record + cluster doctrinal).\n  3. Historia del panel-junto (co-casos donde TODOS son tribunal).\n  4. Diversidad doctrinal (clusters Sprint 9) + heurística de salvamentos.\n  5. Conflictos árbitro-parte (Sprint 8 anti_fraud_networks).\n  6. Predicción ajustada: usa co-casos si n≥5, sino baseline global + sesgo.","operationId":"lab_simular_tribunal_lab_simular_tribunal_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SimularTribunalRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Lab Simular Tribunal Lab Simular Tribunal Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/lab/simular-caso":{"post":{"summary":"Lab Simular Caso","description":"Sprint 10 — Laboratorio de Predicción de laudos.co.\n\nDado un caso hipotético, busca similares en el corpus (con relajación\nprogresiva si hay pocos hits), agrega estadísticas y devuelve un\npanorama probabilístico de duración, outcomes, cuantía concedida,\nriesgo de anulación y honorarios esperados.","operationId":"lab_simular_caso_lab_simular_caso_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SimularCasoRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Lab Simular Caso Lab Simular Caso Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/lab/simular-batch":{"post":{"summary":"Lab Simular Batch","description":"Sprint 13 — Matriz comparativa de predicciones para N×M combinaciones.\n\nBody: `{caso, arbitros: [arbitro_id], materias: [str]}` con\n`2 ≤ N ≤ 5` y `1 ≤ M ≤ 3` (tope hard 15 celdas, 504 si supera 30s).\n\nDevuelve matriz de celdas, insights automáticos y metadata. Cachea por\nhash determinístico del request (LRU 64).","operationId":"lab_simular_batch_lab_simular_batch_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SimularBatchRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Lab Simular Batch Lab Simular Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/lab/laudo-backtest":{"post":{"summary":"Lab Laudo Backtest","description":"Backtesting: toma un caso real, predice como si no existiera y\ncompara contra la realidad. Devuelve diff + narrative + similares\nalternativos.","operationId":"lab_laudo_backtest_lab_laudo_backtest_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LaudoBacktestRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Lab Laudo Backtest Lab Laudo Backtest Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/lab/contrafactual":{"post":{"summary":"Lab Contrafactual","description":"Compara la predicción de un caso base vs. la misma predicción cuando\nuna sola variable cambia. Devuelve {base, variante, diff} donde diff\nincluye deltas numéricos y una narrativa heurística sin LLM.\n\nReutiliza la función `lab_simular_caso(req)` (Sprint 10 core), por lo que\ncualquier mejora del simulador se propaga automáticamente. Esta función\npermanece estable mientras el contrato de `lab_simular_caso` no cambie.","operationId":"lab_contrafactual_lab_contrafactual_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContrafactualRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Lab Contrafactual Lab Contrafactual Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/lab/pacto-analisis":{"post":{"summary":"Lab Pacto Analisis","description":"Analiza el texto de un pacto compromisorio. Devuelve:\n  - score 0-100 + nivel (bajo/medio/alto)\n  - features detectadas (centro, n_arbitros, duración, etc.)\n  - patrones de riesgo detectados (con lift del corpus Sprint 9)\n  - top 3 plantillas similares (TF-IDF cosine)\n  - top 3 casos donde pactos similares generaron objeciones kompetenz\n  - recomendaciones de redacción (reglas sobre features)\nSin LLM. Latencia objetivo < 1s.","operationId":"lab_pacto_analisis_lab_pacto_analisis_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PactoAnalisisRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Lab Pacto Analisis Lab Pacto Analisis Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/pdf/analizar":{"post":{"summary":"Pdf Analizar","description":"Extrae texto, infiere tipo, corre NER y — si es pacto — calcula riesgo.\n\nEl PDF NO se persiste: se procesa en memoria y se libera al retornar.\nLimit: 10MB (validado client-side también).","operationId":"pdf_analizar_pdf_analizar_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_pdf_analizar_pdf_analizar_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalizarPdfResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/newsletter/subscribe":{"post":{"summary":"Newsletter Subscribe","description":"Append-only registro de suscriptores al newsletter semanal.\n\nValidación de email vía Pydantic (`EmailStr`, requiere `email-validator`).\nRol/persona normalizados a minúsculas; valores fuera del set permitido se\ntruncan al fallback ('otro' / None) para limpieza sin rechazar al usuario.\n\nDouble opt-in:\n  - Cada subscribe genera `confirmed=False` + un `token` UUID4.\n  - El front debe llamar `/newsletter/confirm` desde el link del correo\n    de confirmación para marcar `confirmed=True`.\n  - Si `RESEND_API_KEY` está configurado, enviamos email; si no, devolvemos\n    el link de confirmación inline (modo preview/dev).","operationId":"newsletter_subscribe_newsletter_subscribe_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NewsletterRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Newsletter Subscribe Newsletter Subscribe Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/newsletter/confirm":{"post":{"summary":"Newsletter Confirm","description":"Marca un subscriber como confirmed=True dado un token válido.","operationId":"newsletter_confirm_newsletter_confirm_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NewsletterConfirmRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Newsletter Confirm Newsletter Confirm Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/newsletter/unsubscribe":{"post":{"summary":"Newsletter Unsubscribe","description":"Marca al subscriber como confirmed=False y agrega unsubscribed_at.","operationId":"newsletter_unsubscribe_newsletter_unsubscribe_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NewsletterUnsubscribeRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Newsletter Unsubscribe Newsletter Unsubscribe Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/newsletter/preview-weekly":{"get":{"summary":"Newsletter Preview Weekly","description":"Pro/admin only — payload del próximo envío semanal.\n\nDevuelve los 5 laudos más recientes + 2 sentencias CC/CSJ del corpus +\n1 estándar destacado. El HTML final lo arma el frontend con\n`lib/newsletterTemplate.ts` (mantenemos la presentación en el cliente).","operationId":"newsletter_preview_weekly_newsletter_preview_weekly_get","parameters":[{"name":"x-laudos-admin-token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Laudos-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Newsletter Preview Weekly Newsletter Preview Weekly Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/centro/{centro_id}/resoluciones":{"get":{"summary":"Centro Resoluciones","description":"Resoluciones/directivas/boletines/tarifas/reglamentos publicados por un\ncentro arbitral. Filtrables por tipo, ordenados por fecha desc.","operationId":"centro_resoluciones_centro__centro_id__resoluciones_get","parameters":[{"name":"centro_id","in":"path","required":true,"schema":{"type":"string","title":"Centro Id"}},{"name":"tipo","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tipo"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/centros/resoluciones/all":{"get":{"summary":"Centros Resoluciones All","description":"Resumen agregado por centro: n_documentos, distribución por tipo y\nfecha del documento más reciente.","operationId":"centros_resoluciones_all_centros_resoluciones_all_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/centros/tarifas-vigentes":{"get":{"summary":"Centros Tarifas Vigentes","description":"URLs canónicas y fechas de vigencia de los tarifarios por centro.","operationId":"centros_tarifas_vigentes_centros_tarifas_vigentes_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/csj/sentencias":{"get":{"summary":"Csj Sentencias","operationId":"csj_sentencias_csj_sentencias_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Q"}},{"name":"tema","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tema"}},{"name":"magistrado","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Magistrado"}},{"name":"year_from","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Year From"}},{"name":"year_to","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Year To"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/csj/sentencias/{sentencia_id}":{"get":{"summary":"Csj Sentencia Detail","operationId":"csj_sentencia_detail_csj_sentencias__sentencia_id__get","parameters":[{"name":"sentencia_id","in":"path","required":true,"schema":{"type":"string","title":"Sentencia Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/csj/stats":{"get":{"summary":"Csj Stats","operationId":"csj_stats_csj_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/citas/parse":{"post":{"summary":"Citas Parse","operationId":"citas_parse_citas_parse_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ParseCitasRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ParseCitasResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/laudo/{caso_id}/resumen":{"get":{"summary":"Laudo Resumen","description":"Genera (o devuelve cached) resumen ejecutivo del laudo en 3-5 párrafos.\n\nEstructura:\n- 1. Hechos esenciales (1 párrafo)\n- 2. Pretensiones principales (1 párrafo bullet)\n- 3. Decisión y razonamiento clave (1-2 párrafos)\n- 4. Doctrina aplicada (1 párrafo)\n- 5. Implicaciones para profesionales (1 párrafo)","operationId":"laudo_resumen_laudo__caso_id__resumen_get","parameters":[{"name":"caso_id","in":"path","required":true,"schema":{"type":"string","title":"Caso Id"}},{"name":"source","in":"query","required":false,"schema":{"type":"string","default":"ccb","title":"Source"}},{"name":"regenerar","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Regenerar"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/laudo-brief/{caso_id}":{"get":{"summary":"Laudo Brief","description":"Brief 60s — consolidador de datos extraídos del laudo (sin LLM runtime).\n\nRetorna estructura optimizada para UI \"lectura rápida\": identidad,\ntribunal, hechos, problemas, decisión, normas, jurisprudencia,\nsalvamentos, chunks destacados, anulaciones.","operationId":"laudo_brief_laudo_brief__caso_id__get","parameters":[{"name":"caso_id","in":"path","required":true,"schema":{"type":"string","title":"Caso Id"}},{"name":"source","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Laudo Brief Laudo Brief  Caso Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api-keys/create":{"post":{"summary":"S14 Create Api Key","description":"Genera una nueva API key. La clave raw se retorna UNA SOLA VEZ.","operationId":"s14_create_api_key_api_keys_create_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/_S14CreateApiKeyRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response S14 Create Api Key Api Keys Create Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api-keys/by-email/{email}":{"get":{"summary":"S14 List Api Keys By Email","description":"Lista keys asociadas a un email. No expone key_hash ni la raw key.","operationId":"s14_list_api_keys_by_email_api_keys_by_email__email__get","parameters":[{"name":"email","in":"path","required":true,"schema":{"type":"string","title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response S14 List Api Keys By Email Api Keys By Email  Email  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api-keys/{key_id}/revoke":{"post":{"summary":"S14 Revoke Api Key Endpoint","description":"Revoca una key. Requiere email del owner para evitar revocación cruzada.","operationId":"s14_revoke_api_key_endpoint_api_keys__key_id__revoke_post","parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string","title":"Key Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/_S14RevokeRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response S14 Revoke Api Key Endpoint Api Keys  Key Id  Revoke Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api-keys/usage":{"get":{"summary":"S14 Api Keys Usage","description":"Retorna stats de uso de la key (rate limit, requests usados).","operationId":"s14_api_keys_usage_api_keys_usage_get","parameters":[{"name":"x-laudos-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Laudos-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response S14 Api Keys Usage Api Keys Usage Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/open-data/laudos.csv":{"get":{"summary":"Open Data Laudos Csv","description":"CSV con resumen de todos los laudos del corpus (metadata únicamente).","operationId":"open_data_laudos_csv_open_data_laudos_csv_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/open-data/arbitros.csv":{"get":{"summary":"Open Data Arbitros Csv","description":"CSV con directorio de árbitros (id, nombre, n_laudos).\n\nSprint 23 · B2: usa ``v_arbitros_clean`` (canonical_v2 Title Case, excluye\nno-árbitros) cuando esté disponible; fallback al legacy view.","operationId":"open_data_arbitros_csv_open_data_arbitros_csv_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/open-data/centros.json":{"get":{"summary":"Open Data Centros Json","description":"Stats agregadas por centro arbitral del corpus.","operationId":"open_data_centros_json_open_data_centros_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/open-data/cc-sentencias.json":{"get":{"summary":"Open Data Cc Sentencias","description":"Top 200 sentencias de la Corte Constitucional sobre arbitraje (Sprint 9).","operationId":"open_data_cc_sentencias_open_data_cc_sentencias_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/open-data/csj-sentencias.json":{"get":{"summary":"Open Data Csj Sentencias","description":"Top 200 sentencias de la CSJ Sala Civil sobre arbitraje (Sprint 12).","operationId":"open_data_csj_sentencias_open_data_csj_sentencias_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/open-data/centros-resoluciones.json":{"get":{"summary":"Open Data Centros Resoluciones","description":"61 resoluciones / boletines / directivas de centros (Sprint 12).","operationId":"open_data_centros_resoluciones_open_data_centros_resoluciones_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/open-data/clausulas-modelo.json":{"get":{"summary":"Open Data Clausulas Modelo","description":"18 cláusulas compromisorias modelo curadas (Sprint 8).","operationId":"open_data_clausulas_modelo_open_data_clausulas_modelo_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/open-data/network-graph.json":{"get":{"summary":"Open Data Network Graph","description":"Grafo árbitros ↔ firmas ↔ partes (Sprint 8).","operationId":"open_data_network_graph_open_data_network_graph_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/open-data/citation-graph.json":{"get":{"summary":"Open Data Citation Graph","description":"Citation graph inter-laudos (Sprint 8).","operationId":"open_data_citation_graph_open_data_citation_graph_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/open-data/honorarios.json":{"get":{"summary":"Open Data Honorarios","description":"Benchmark de honorarios por bucket cuantía/centro (Sprint 9).","operationId":"open_data_honorarios_open_data_honorarios_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/open-data/manifest.json":{"get":{"summary":"Open Data Manifest","description":"Manifest con todos los datasets abiertos disponibles.","operationId":"open_data_manifest_open_data_manifest_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/auth/magic-link":{"post":{"summary":"S15 Auth Magic Link","description":"Genera magic link + envía email (o devuelve preview en dev).","operationId":"s15_auth_magic_link_auth_magic_link_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/_S15MagicLinkRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response S15 Auth Magic Link Auth Magic Link Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/verify":{"get":{"summary":"S15 Auth Verify","description":"Verifica magic token y emite JWT session token.","operationId":"s15_auth_verify_auth_verify_get","parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response S15 Auth Verify Auth Verify Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/me":{"get":{"summary":"S15 Auth Me","description":"Devuelve info del usuario logueado (verifica JWT).","operationId":"s15_auth_me_auth_me_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response S15 Auth Me Auth Me Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/logout":{"post":{"summary":"S15 Auth Logout","description":"Stateless JWT — el cliente debe borrar la cookie.","operationId":"s15_auth_logout_auth_logout_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response S15 Auth Logout Auth Logout Post"}}}}}}},"/me/metrics":{"get":{"summary":"S26C1 Me Metrics","description":"Métricas personales del árbitro logueado (Sprint 26 · C1).\n\nRequiere JWT válido (Bearer).  Si el usuario no matchea con ningún árbitro\ndel corpus, devuelve ``{is_arbitro: false}`` con un mensaje explicativo.\n\nPrivacidad:\n    - Sólo expone métricas del propio árbitro autenticado.\n    - Comparativas son agregadas anonimizadas (k-anonymity ≥ 5).\n    - No incluye métricas de otros árbitros via este endpoint.","operationId":"s26c1_me_metrics_me_metrics_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response S26C1 Me Metrics Me Metrics Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/metrics":{"get":{"summary":"Admin Metrics","description":"Métricas agregadas del producto.  Requiere header `X-Admin-Token`.\n\nToken comparado con env var `LAUDOS_ADMIN_TOKEN` (mismo secret que el\nresto de endpoints administrativos).  Sin token configurado en el\nserver → 503; mismatch → 401.","operationId":"admin_metrics_admin_metrics_get","parameters":[{"name":"x-admin-token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Admin Metrics Admin Metrics Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/errors/log":{"post":{"summary":"Errors Log","description":"Log de error client-side a JSONL file.","operationId":"errors_log_errors_log_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorLogRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/workspace/sync":{"get":{"summary":"Workspace Sync Get","operationId":"workspace_sync_get_workspace_sync_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"summary":"Workspace Sync Put","operationId":"workspace_sync_put_workspace_sync_put","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceSyncRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/workspace/merge":{"post":{"summary":"Workspace Merge","description":"Merge: combina lo local con lo del servidor (dedupe por key compuesta).\nÚtil al hacer login por primera vez.","operationId":"workspace_merge_workspace_merge_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceSyncRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/billing/checkout":{"post":{"summary":"Billing Checkout","description":"Crea Stripe Checkout Session para upgrade a Pro.","operationId":"billing_checkout_billing_checkout_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckoutRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/billing/portal":{"post":{"summary":"Billing Portal","description":"Crea Stripe Customer Portal session para gestionar suscripción.","operationId":"billing_portal_billing_portal_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/billing/status":{"get":{"summary":"Billing Status","description":"Devuelve plan actual + datos suscripción.","operationId":"billing_status_billing_status_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/billing/webhook":{"post":{"summary":"Billing Webhook","description":"Recibe webhooks de Stripe. Verifica signature y actualiza users.jsonl.","operationId":"billing_webhook_billing_webhook_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/usage/track":{"post":{"summary":"Usage Track","description":"Reportar uso de una feature (autenticado).","operationId":"usage_track_usage_track_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UsageReportRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/usage/today":{"get":{"summary":"Usage Today","description":"Devuelve usage de todas las features para hoy.","operationId":"usage_today_usage_today_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/usage/can-use/{feature}":{"get":{"summary":"Usage Can Use","description":"Check rápido: ¿puede el user usar esta feature?","operationId":"usage_can_use_usage_can_use__feature__get","parameters":[{"name":"feature","in":"path","required":true,"schema":{"type":"string","title":"Feature"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api-keys/v2/create":{"post":{"summary":"S16 Create Api Key V2","description":"Crea API key usando JWT del usuario logueado (en vez de email manual).","operationId":"s16_create_api_key_v2_api_keys_v2_create_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/_S16ApiKeysCreateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response S16 Create Api Key V2 Api Keys V2 Create Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api-keys/v2/mine":{"get":{"summary":"S16 List My Api Keys","description":"Lista keys del usuario logueado (JWT).","operationId":"s16_list_my_api_keys_api_keys_v2_mine_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response S16 List My Api Keys Api Keys V2 Mine Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api-keys/v2/{key_id}/revoke":{"post":{"summary":"S16 Revoke My Key","description":"Revoca key del usuario logueado (verifica ownership por user_id/email).","operationId":"s16_revoke_my_key_api_keys_v2__key_id__revoke_post","parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string","title":"Key Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response S16 Revoke My Key Api Keys V2  Key Id  Revoke Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/cc/sentencias":{"get":{"summary":"Cc Sentencias","operationId":"cc_sentencias_cc_sentencias_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Q"}},{"name":"tipo","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tipo"}},{"name":"materia","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Materia"}},{"name":"magistrado","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Magistrado"}},{"name":"year_from","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Year From"}},{"name":"year_to","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Year To"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/cc/sentencias/{sentencia_id}":{"get":{"summary":"Cc Sentencia Detail","operationId":"cc_sentencia_detail_cc_sentencias__sentencia_id__get","parameters":[{"name":"sentencia_id","in":"path","required":true,"schema":{"type":"string","title":"Sentencia Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/cc/stats":{"get":{"summary":"Cc Stats","operationId":"cc_stats_cc_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/relaciones/explorar":{"get":{"summary":"Relaciones Explorar","description":"Devuelve entidades de to_type relacionadas a (from_type, from_id).\n\nMatriz soportada (from -> to):\n  arbitro -> parte | centro | materia | firma\n  parte   -> arbitro | centro | parte | materia\n  centro  -> arbitro | materia | parte\n  materia -> arbitro | parte | centro\n  firma   -> arbitro | parte","operationId":"relaciones_explorar_relaciones_explorar_get","parameters":[{"name":"from_type","in":"query","required":true,"schema":{"type":"string","title":"From Type"}},{"name":"from_id","in":"query","required":true,"schema":{"type":"string","title":"From Id"}},{"name":"to_type","in":"query","required":true,"schema":{"type":"string","title":"To Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/alerts/follow":{"post":{"summary":"Alerts Follow","description":"Crea (o reactiva) un follow del user sobre una entidad.","operationId":"alerts_follow_alerts_follow_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/_AlertsFollowRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Alerts Follow Alerts Follow Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Alerts Unfollow","description":"Soft delete del follow (active=FALSE).","operationId":"alerts_unfollow_alerts_follow_delete","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/_AlertsFollowRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Alerts Unfollow Alerts Follow Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/alerts/follows":{"get":{"summary":"Alerts List Follows","description":"Lista todos los follows activos del user logueado.","operationId":"alerts_list_follows_alerts_follows_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Alerts List Follows Alerts Follows Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/alerts/feed":{"get":{"summary":"Alerts Feed","description":"Feed de eventos recientes filtrados por los follows del user.\n\n`days` controla el rango (default 30, max 365). `limit` cap del total.","operationId":"alerts_feed_alerts_feed_get","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Days"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Alerts Feed Alerts Feed Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/alerts/preferences":{"get":{"summary":"Alerts Get Preferences","operationId":"alerts_get_preferences_alerts_preferences_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Alerts Get Preferences Alerts Preferences Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"summary":"Alerts Put Preferences","operationId":"alerts_put_preferences_alerts_preferences_put","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/_AlertsPrefsRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Alerts Put Preferences Alerts Preferences Put"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/alerts/send-weekly":{"post":{"summary":"Alerts Send Weekly","description":"Envia email semanal a todos los users con follows activos.\n\nRequiere header `X-Laudos-Admin-Token`. Si `dry_run=true` no manda emails,\nsólo devuelve resumen (útil para testear).\n\nIdempotencia (Sprint 19): si se invocó hace <24h, devuelve\n`skipped_idempotent` sin tocar Resend. Bypass con `force=true`.\nEl cron Modal corre lunes 13:00 UTC (= 08:00 Bogotá UTC-5), ver\n`scripts/modal_api_server.py::send_weekly_alerts_cron`.","operationId":"alerts_send_weekly_alerts_send_weekly_post","parameters":[{"name":"dry_run","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Dry Run"}},{"name":"force","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Force"}},{"name":"x-laudos-admin-token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Laudos-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Alerts Send Weekly Alerts Send Weekly Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/lab/backtest":{"post":{"summary":"Lab Backtest Cv","description":"Backtest v2 con k-fold cross-validation honesto.\n\nSprint 11 — sucesor de `/lab/laudo-backtest` (single-case).\nMétricas principales:\n  - outcome: F1 macro (acompañado de accuracy, confusion_matrix)\n  - cuantia/duracion: R² (acompañado de MAPE, residuals histogram + scatter)","operationId":"lab_backtest_cv_lab_backtest_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BacktestCVRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Lab Backtest Cv Lab Backtest Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/status/uptime":{"get":{"summary":"Status Uptime","description":"Estado operativo: uptime, latencias rolling (últimas 100 requests)\ny dependencias. Observación pasiva — no genera tráfico externo.","operationId":"status_uptime_status_uptime_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Status Uptime Status Uptime Get"}}}}}}},"/admin/metrics/overview":{"get":{"summary":"Admin Metrics Overview","description":"Métricas agregadas de producto para el dashboard `/admin`.\n\nDefensivo: cada sub-stat aísla su error y devuelve estructura estable.\nAuth: header `X-Laudos-Admin-Token`.","operationId":"admin_metrics_overview_admin_metrics_overview_get","parameters":[{"name":"x-laudos-admin-token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Laudos-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Admin Metrics Overview Admin Metrics Overview Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/metrics/recent-activity":{"get":{"summary":"Admin Metrics Recent Activity","description":"Últimos eventos heterogéneos (newsletter, follows, briefs/usage).\n\nOrdenados por timestamp desc. `limit` máximo 200.\nAuth: header `X-Laudos-Admin-Token`.","operationId":"admin_metrics_recent_activity_admin_metrics_recent_activity_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}},{"name":"x-laudos-admin-token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Laudos-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Admin Metrics Recent Activity Admin Metrics Recent Activity Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/metrics/series":{"get":{"summary":"Admin Metrics Series","description":"Serie temporal diaria para una métrica.\n\nQuery: ?metric=subscribers|briefs|searches&from=YYYY-MM-DD&to=YYYY-MM-DD\nDefaults: últimos 30 días terminando hoy (UTC). Max range: 365 días.\nAuth: header `X-Laudos-Admin-Token`.","operationId":"admin_metrics_series_admin_metrics_series_get","parameters":[{"name":"metric","in":"query","required":true,"schema":{"type":"string","title":"Metric"}},{"name":"from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"From"}},{"name":"to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"To"}},{"name":"x-laudos-admin-token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Laudos-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Admin Metrics Series Admin Metrics Series Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/search/click":{"post":{"summary":"Search Click","description":"Registra que el usuario clickeó un caso desde un resultado de búsqueda.\n\nNo requiere auth. Idempotente por event_id (último click gana). Respeta\n`X-No-Track: 1` y devuelve 204 sin tocar la DB.","operationId":"search_click_search_click_post","parameters":[{"name":"x-no-track","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-No-Track"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/_S21AnClickRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Search Click Search Click Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/analytics/top-queries":{"get":{"summary":"Admin Analytics Top Queries","description":"Top queries por número de búsquedas en últimos `days`.\n\nAgrupa por `query_norm` (lowercase trim). Devuelve CTR (clicks/searches).","operationId":"admin_analytics_top_queries_admin_analytics_top_queries_get","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":7,"title":"Days"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"x-laudos-admin-token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Laudos-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Admin Analytics Top Queries Admin Analytics Top Queries Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/analytics/zero-results":{"get":{"summary":"Admin Analytics Zero Results","description":"Queries con n_hits=0 — gold standard de gaps de cobertura.","operationId":"admin_analytics_zero_results_admin_analytics_zero_results_get","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":7,"title":"Days"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"x-laudos-admin-token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Laudos-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Admin Analytics Zero Results Admin Analytics Zero Results Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/analytics/timeline":{"get":{"summary":"Admin Analytics Timeline","description":"Serie diaria: n_searches, n_unique_users, avg_latency_ms, n_zero_results.","operationId":"admin_analytics_timeline_admin_analytics_timeline_get","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Days"}},{"name":"x-laudos-admin-token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Laudos-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Admin Analytics Timeline Admin Analytics Timeline Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/analytics/by-tier":{"get":{"summary":"Admin Analytics By Tier","description":"Breakdown por tier con n_searches y CTR (clicks/searches).","operationId":"admin_analytics_by_tier_admin_analytics_by_tier_get","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Days"}},{"name":"x-laudos-admin-token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Laudos-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Admin Analytics By Tier Admin Analytics By Tier Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/analytics/popular-caso-ids":{"get":{"summary":"Admin Analytics Popular Caso Ids","description":"Casos más clickeados desde resultados de búsqueda en últimos `days`.","operationId":"admin_analytics_popular_caso_ids_admin_analytics_popular_caso_ids_get","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Days"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"x-laudos-admin-token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Laudos-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Admin Analytics Popular Caso Ids Admin Analytics Popular Caso Ids Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/analytics/feature-adoption":{"get":{"summary":"Admin Analytics Feature Adoption","description":"Adopción de features de búsqueda + features tracked en feature_usage.jsonl.\n\nSearch modes: bm25, dense, hybrid + llm_rerank (subset de hybrid).\nExtras: briefs, simulaciones del Lab, Open Data downloads (de\nfeature_usage.jsonl). Si la feature no tiene eventos en la ventana, devuelve 0.","operationId":"admin_analytics_feature_adoption_admin_analytics_feature_adoption_get","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Days"}},{"name":"x-laudos-admin-token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Laudos-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Admin Analytics Feature Adoption Admin Analytics Feature Adoption Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/analytics/summary":{"get":{"summary":"Admin Analytics Summary","description":"Stats top de cards: total searches, unique users, CTR avg, zero results rate.","operationId":"admin_analytics_summary_admin_analytics_summary_get","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":7,"title":"Days"}},{"name":"x-laudos-admin-token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Laudos-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Admin Analytics Summary Admin Analytics Summary Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/lab/plazos-tribunal":{"post":{"summary":"Lab Plazos Tribunal","description":"Sprint 25 D1 — verificador de plazos legales del tribunal arbitral.\n\nCalcula los hitos clave (instalación, réplica, contestación, primera\naudiencia, plazo del laudo, recurso de anulación, revisión) basados en\nLey 1563 de 2012 y el reglamento del centro. Genera alertas cuando un\nplazo cae en fin de semana o festivo nacional colombiano.","operationId":"lab_plazos_tribunal_lab_plazos_tribunal_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/_S25D1PlazosRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Lab Plazos Tribunal Lab Plazos Tribunal Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/lab/plazos-tribunal/calendar.ics":{"get":{"summary":"Lab Plazos Tribunal Ics","description":"Sprint 25 D1 — descarga iCalendar (.ics) con todos los plazos del tribunal.\n\nCompatible con Google Calendar, Outlook, Apple Calendar y otros lectores\nRFC 5545. Incluye VALARM (-P7D) para hitos críticos.","operationId":"lab_plazos_tribunal_ics_lab_plazos_tribunal_calendar_ics_get","parameters":[{"name":"fecha_instalacion","in":"query","required":true,"schema":{"type":"string","title":"Fecha Instalacion"}},{"name":"centro","in":"query","required":false,"schema":{"type":"string","default":"ccb","title":"Centro"}},{"name":"cuantia_cop","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Cuantia Cop"}},{"name":"materia","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Materia"}},{"name":"prorroga_acordada","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Prorroga Acordada"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/lab/coherencia-laudo":{"post":{"summary":"Lab Coherencia Laudo","description":"Sprint 25 · D3 — verificador anti-fraude decisional.\n\nFree: 2 verificaciones / mes. Pro/Enterprise: ilimitado.\nRate-limit: 5 req/min por user_id (o IP si anónimo).","operationId":"lab_coherencia_laudo_lab_coherencia_laudo_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"x-forwarded-for","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Forwarded-For"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CoherenciaLaudoRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Lab Coherencia Laudo Lab Coherencia Laudo Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/lab/editor-laudo/check":{"post":{"summary":"Lab Editor Laudo Check","description":"Sprint 26 · B1 — validadores server-side + análisis profundo IA opcional.","operationId":"lab_editor_laudo_check_lab_editor_laudo_check_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"x-forwarded-for","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Forwarded-For"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EditorLaudoCheckRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Lab Editor Laudo Check Lab Editor Laudo Check Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/lab/editor-laudo/anti-anulacion":{"post":{"summary":"Lab Editor Laudo Anti Anulacion","description":"Editor anti-anulación v2 — 9 reglas determinísticas Sprint 1+2 DD-3.\n\nNO es predictor estadístico (N=5 prosperaron en CE, insuficiente). ES\nchecklist + lint textual + calculadora de plazo, cada regla con cita\njurisprudencial directa del corpus de 74 sentencias del CE Sec. 3ª.\n\nSprint 1: RF-1 (íntima convicción), RF-3 (acto admin firme),\nRF-5 (calculadora plazo, requiere metadata), RF-6 (incompetencia +\ncostas), RF-9 (estatal — aviso).\n\nSprint 2 (determinístico, sin LLM runtime): RF-2 (motivación\nprobatoria), RF-4 (extra/ultra/citra petita), RF-7 (carátula sin\nanexos), RF-10 (coverage motivacional).","operationId":"lab_editor_laudo_anti_anulacion_lab_editor_laudo_anti_anulacion_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AntiAnulacionRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Lab Editor Laudo Anti Anulacion Lab Editor Laudo Anti Anulacion Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/lab/anexo-economico":{"post":{"summary":"Lab Anexo Economico","description":"Sprint 26 · B2 — Genera anexo economico (preview JSON).\n\nPara descargar el Excel use `POST /lab/anexo-economico.xlsx` con el\nmismo payload. Disclaimer: calculo aritmetico, no asesoria legal.","operationId":"lab_anexo_economico_lab_anexo_economico_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnexoEconomicoRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Lab Anexo Economico Lab Anexo Economico Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/lab/anexo-economico.xlsx":{"post":{"summary":"Lab Anexo Economico Xlsx","description":"Sprint 26 · B2 — Descarga directa del .xlsx generado.","operationId":"lab_anexo_economico_xlsx_lab_anexo_economico_xlsx_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnexoEconomicoRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/me/tribunales":{"post":{"summary":"Me Tribunales Create","description":"Sprint 26 D1 - guarda un tribunal activo del arbitro logueado.","operationId":"me_tribunales_create_me_tribunales_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TribunalCreateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Me Tribunales Create Me Tribunales Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"summary":"Me Tribunales List","description":"Sprint 26 D1 - lista los tribunales activos del user logueado.","operationId":"me_tribunales_list_me_tribunales_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Me Tribunales List Me Tribunales Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/me/tribunales/{tribunal_id}":{"get":{"summary":"Me Tribunales Detail","description":"Sprint 26 D1 - detalle de un tribunal activo (timeline completo).","operationId":"me_tribunales_detail_me_tribunales__tribunal_id__get","parameters":[{"name":"tribunal_id","in":"path","required":true,"schema":{"type":"string","title":"Tribunal Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Me Tribunales Detail Me Tribunales  Tribunal Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Me Tribunales Archive","description":"Sprint 26 D1 - archiva un tribunal (active=FALSE). Soft delete.","operationId":"me_tribunales_archive_me_tribunales__tribunal_id__delete","parameters":[{"name":"tribunal_id","in":"path","required":true,"schema":{"type":"string","title":"Tribunal Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Me Tribunales Archive Me Tribunales  Tribunal Id  Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/me/plazos-proximos":{"get":{"summary":"Me Plazos Proximos","description":"Sprint 26 D1 - plazos proximos del user (agregados por tribunal activo).\n\nDevuelve la lista de hitos cuya fecha cae entre hoy y hoy+`days`,\nordenados cronologicamente. Cada item lleva `dias_restantes`,\n`critico` (de la S25 D1) y refs al tribunal activo de origen.","operationId":"me_plazos_proximos_me_plazos_proximos_get","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Days"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Me Plazos Proximos Me Plazos Proximos Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/tribunales/send-reminders":{"post":{"summary":"Admin Tribunales Send Reminders","description":"Sprint 26 D1 - endpoint admin para invocar manualmente el recordatorio.\n\nDefault `dry_run=True` para evitar envios accidentales. Util para QA y\npara pre-validar la idempotencia.","operationId":"admin_tribunales_send_reminders_admin_tribunales_send_reminders_post","parameters":[{"name":"dry_run","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Dry Run"}},{"name":"x-laudos-admin-token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Laudos-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Admin Tribunales Send Reminders Admin Tribunales Send Reminders Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/observatorio-camara/{centro}":{"get":{"summary":"Observatorio Camara","description":"Dashboard institucional B2B v0 — consolidador por centro arbitral.\n\nMVP sin multitenancy/auth. Para evaluación institucional en reuniones\nde prospección. Producción requerirá auth + permisos + onboarding\nformal por cámara.","operationId":"observatorio_camara_observatorio_camara__centro__get","parameters":[{"name":"centro","in":"path","required":true,"schema":{"type":"string","title":"Centro"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Observatorio Camara Observatorio Camara  Centro  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/observatorio-camara":{"get":{"summary":"Observatorio Camara Index","description":"Lista de centros disponibles para Observatorio.","operationId":"observatorio_camara_index_observatorio_camara_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Observatorio Camara Index Observatorio Camara Get"}}}}}}}},"components":{"schemas":{"AnalizarPdfResponse":{"properties":{"n_paginas":{"type":"integer","title":"N Paginas"},"n_chars":{"type":"integer","title":"N Chars"},"tipo_inferido":{"type":"string","title":"Tipo Inferido"},"texto_preview":{"type":"string","title":"Texto Preview"},"features_pacto":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Features Pacto"},"riesgo_score":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Riesgo Score"},"entidades_detectadas":{"additionalProperties":{"items":{"type":"string"},"type":"array"},"type":"object","title":"Entidades Detectadas"}},"type":"object","required":["n_paginas","n_chars","tipo_inferido","texto_preview","entidades_detectadas"],"title":"AnalizarPdfResponse"},"AnexoEconomicoRequest":{"properties":{"titulo":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Titulo","description":"Titulo del anexo (default: 'Anexo economico')."},"caso":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Caso","description":"Identificador del caso / radicado (texto libre)."},"partes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Partes","description":"Convocante vs. convocada (texto libre)."},"capital_base":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Capital Base","description":"Capital base del anexo (referencia)."},"fecha_capital":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fecha Capital"},"fecha_laudo":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fecha Laudo"},"intereses_corrientes":{"anyOf":[{"$ref":"#/components/schemas/IntCorrientesInput"},{"type":"null"}]},"intereses_moratorios":{"anyOf":[{"$ref":"#/components/schemas/IntMoratoriosInput"},{"type":"null"}]},"indexacion_ipc":{"anyOf":[{"$ref":"#/components/schemas/IndexacionIPCInput"},{"type":"null"}]},"lucro_cesante":{"anyOf":[{"$ref":"#/components/schemas/LucroCesanteInput"},{"type":"null"}]},"costas":{"anyOf":[{"$ref":"#/components/schemas/CostasInput"},{"type":"null"}]}},"type":"object","title":"AnexoEconomicoRequest","description":"Payload completo del anexo economico.\n\nCada bloque es opcional: si se omite, el concepto no aparece en el\nresultado. Capital base + fechas de referencia son metadatos para el\nencabezado del anexo."},"AntiAnulacionMeta":{"properties":{"fecha_instalacion":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fecha Instalacion"},"plazo_inicial_meses":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Plazo Inicial Meses","default":6},"prorrogas_meses":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Prorrogas Meses","default":0},"suspensiones_dias":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Suspensiones Dias","default":0},"fecha_laudo_propuesta":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fecha Laudo Propuesta"},"convocada_es_estatal":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Convocada Es Estatal"},"n_pretensiones":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"N Pretensiones"}},"type":"object","title":"AntiAnulacionMeta","description":"Metadata opcional — habilita calculadora plazo (RF-5)."},"AntiAnulacionRequest":{"properties":{"texto":{"type":"string","title":"Texto"},"metadata":{"anyOf":[{"$ref":"#/components/schemas/AntiAnulacionMeta"},{"type":"null"}]}},"type":"object","required":["texto"],"title":"AntiAnulacionRequest"},"ArbitroClaimRequest":{"properties":{"tipo":{"type":"string","title":"Tipo","description":"'claim' o 'correccion'"},"email":{"type":"string","title":"Email"},"nombre_titular":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Nombre Titular"},"cargo_actual":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cargo Actual"},"url_verificable":{"type":"string","title":"Url Verificable"},"seccion":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Seccion"},"texto_actual":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Texto Actual"},"texto_propuesto":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Texto Propuesto"},"mensaje":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mensaje"},"declaracion_jurada":{"type":"boolean","title":"Declaracion Jurada","default":false}},"type":"object","required":["tipo","email","url_verificable"],"title":"ArbitroClaimRequest"},"ArbitroClaimReviewRequest":{"properties":{"status":{"type":"string","title":"Status","description":"'verified' o 'rejected'"},"reviewer":{"type":"string","title":"Reviewer"},"review_notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Review Notes"}},"type":"object","required":["status","reviewer"],"title":"ArbitroClaimReviewRequest"},"ArbitroRecommendRequest":{"properties":{"materia":{"type":"string","title":"Materia"},"cuantia_estimada_cop":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Cuantia Estimada Cop"},"complejidad":{"type":"string","title":"Complejidad","default":"media"},"preferencia_duracion":{"type":"string","title":"Preferencia Duracion","default":"estandar"},"preferencia_balance":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Preferencia Balance"},"excluir_arbitros_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Excluir Arbitros Ids"},"limit":{"type":"integer","title":"Limit","default":10}},"type":"object","required":["materia"],"title":"ArbitroRecommendRequest"},"AskRequest":{"properties":{"question":{"type":"string","title":"Question"},"top_k":{"type":"integer","maximum":20.0,"minimum":1.0,"title":"Top K","default":10},"model":{"type":"string","title":"Model","description":"Anthropic model","default":"claude-haiku-4-5"},"mode":{"type":"string","title":"Mode","description":"hybrid | graphrag","default":"hybrid"},"max_target_cards":{"type":"integer","maximum":20.0,"minimum":0.0,"title":"Max Target Cards","description":"Solo aplica si mode=graphrag","default":8}},"type":"object","required":["question"],"title":"AskRequest"},"AskResponse":{"properties":{"question":{"type":"string","title":"Question"},"answer":{"type":"string","title":"Answer"},"citations":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Citations"},"n_chunks_used":{"type":"integer","title":"N Chunks Used"},"mode":{"type":"string","title":"Mode","default":"hybrid"},"normas_invocadas":{"items":{"$ref":"#/components/schemas/TargetCardSummary"},"type":"array","title":"Normas Invocadas"}},"type":"object","required":["question","answer","citations","n_chunks_used"],"title":"AskResponse"},"BacktestCVRequest":{"properties":{"model":{"type":"string","enum":["outcome","cuantia","duracion"],"title":"Model","description":"Modelo a evaluar"},"cv_folds":{"type":"integer","maximum":10.0,"minimum":3.0,"title":"Cv Folds","description":"Número de folds (3-10). Default 5.","default":5},"filter_materia":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Filter Materia","description":"Substring match sobre materia_principal."},"filter_año_range":{"anyOf":[{"items":{"type":"integer"},"type":"array","maxItems":2,"minItems":2},{"type":"null"}],"title":"Filter Año Range","description":"[lo, hi] inclusive. Ej: [2018, 2023]."}},"type":"object","required":["model"],"title":"BacktestCVRequest","description":"Schema canónico Sprint 11 — backtest k-fold."},"BioSourceRequest":{"properties":{"campo":{"type":"string","title":"Campo","description":"Campo bio al que aplica esta fuente"},"valor_resumen":{"type":"string","maxLength":500,"title":"Valor Resumen","description":"Texto corto del valor"},"valor_full":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Valor Full","description":"Estructura completa opcional"},"source_url":{"type":"string","title":"Source Url","description":"URL pública verificable"},"source_type":{"type":"string","title":"Source Type","description":"Tipo de fuente"},"confidence":{"type":"string","title":"Confidence","description":"high|medium|low","default":"medium"},"extracted_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Extracted By","description":"Identificador del extractor"}},"type":"object","required":["campo","valor_resumen","source_url","source_type"],"title":"BioSourceRequest"},"BioSourceVerifyRequest":{"properties":{"verified_by_team":{"type":"boolean","title":"Verified By Team","default":false},"verified_by_subject":{"type":"boolean","title":"Verified By Subject","default":false},"verifier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Verifier"},"review_notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Review Notes"}},"type":"object","title":"BioSourceVerifyRequest"},"Body_pdf_analizar_pdf_analizar_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"}},"type":"object","required":["file"],"title":"Body_pdf_analizar_pdf_analizar_post"},"BriefEstandar":{"properties":{"nombre":{"type":"string","title":"Nombre"},"n_casos_aplicado":{"type":"integer","title":"N Casos Aplicado","default":0},"snippet":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Snippet"}},"type":"object","required":["nombre"],"title":"BriefEstandar"},"BriefPrecedente":{"properties":{"source":{"type":"string","title":"Source"},"caso_id":{"type":"string","title":"Caso Id"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"materia":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Materia"},"decision_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Decision Label"},"año":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Año"},"similarity":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Similarity"}},"type":"object","required":["source","caso_id"],"title":"BriefPrecedente"},"BriefRegenSectionRequest":{"properties":{"template_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Template Id"},"section_key":{"type":"string","title":"Section Key"},"materia":{"type":"string","title":"Materia"},"section_inputs":{"additionalProperties":{"type":"string"},"type":"object","title":"Section Inputs"},"other_sections":{"items":{"$ref":"#/components/schemas/BriefSection"},"type":"array","title":"Other Sections"},"user_edit_note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Edit Note","description":"Instrucción del usuario sobre cómo modificar esta sección"},"model":{"type":"string","title":"Model","default":"claude-sonnet-4-6"}},"type":"object","required":["section_key","materia"],"title":"BriefRegenSectionRequest"},"BriefRegenSectionResponse":{"properties":{"section":{"$ref":"#/components/schemas/BriefSection"},"verified_citations":{"items":{"type":"string"},"type":"array","title":"Verified Citations"},"unverified_citations":{"items":{"type":"string"},"type":"array","title":"Unverified Citations"},"model":{"type":"string","title":"Model"}},"type":"object","required":["section","model"],"title":"BriefRegenSectionResponse"},"BriefRequest":{"properties":{"tipo":{"type":"string","title":"Tipo","description":"demanda_arbitral | contestacion | memorial_alegato | recusacion | liquidacion_perjuicios"},"materia":{"type":"string","maxLength":120,"minLength":2,"title":"Materia"},"hechos_resumen":{"type":"string","maxLength":4000,"minLength":200,"title":"Hechos Resumen","description":"Resumen narrativo de los hechos del caso"},"cuantia_cop":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Cuantia Cop"},"centro":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Centro"},"pretensiones_principales":{"items":{"type":"string"},"type":"array","maxItems":30,"title":"Pretensiones Principales"},"model":{"type":"string","title":"Model","description":"Anthropic model id","default":"claude-sonnet-4-6"}},"type":"object","required":["tipo","materia","hechos_resumen"],"title":"BriefRequest"},"BriefResponse":{"properties":{"brief":{"type":"string","title":"Brief"},"tipo":{"type":"string","title":"Tipo"},"materia":{"type":"string","title":"Materia"},"precedentes_usados":{"items":{"$ref":"#/components/schemas/BriefPrecedente"},"type":"array","title":"Precedentes Usados"},"estandares_aplicados":{"items":{"$ref":"#/components/schemas/BriefEstandar"},"type":"array","title":"Estandares Aplicados"},"model":{"type":"string","title":"Model"},"disclaimer":{"type":"string","title":"Disclaimer"}},"type":"object","required":["brief","tipo","materia","model","disclaimer"],"title":"BriefResponse"},"BriefSection":{"properties":{"key":{"type":"string","title":"Key"},"title":{"type":"string","title":"Title"},"content":{"type":"string","title":"Content"},"citations":{"items":{"type":"string"},"type":"array","title":"Citations"}},"type":"object","required":["key","title","content"],"title":"BriefSection"},"BriefV2Request":{"properties":{"template_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Template Id","description":"ID de template; si None, usa modo Custom (libre)."},"section_inputs":{"additionalProperties":{"type":"string"},"type":"object","title":"Section Inputs"},"materia":{"type":"string","maxLength":120,"minLength":2,"title":"Materia"},"cuantia_cop":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Cuantia Cop"},"centro":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Centro"},"pretensiones_principales":{"items":{"type":"string"},"type":"array","maxItems":30,"title":"Pretensiones Principales"},"tipo":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tipo","description":"Legacy: tipo si no hay template_id"},"hechos_resumen":{"anyOf":[{"type":"string","maxLength":4000},{"type":"null"}],"title":"Hechos Resumen"},"model":{"type":"string","title":"Model","description":"Anthropic model id","default":"claude-sonnet-4-6"}},"type":"object","required":["materia"],"title":"BriefV2Request"},"BriefV2Response":{"properties":{"template_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Template Id"},"template_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Template Label"},"sections":{"items":{"$ref":"#/components/schemas/BriefSection"},"type":"array","title":"Sections"},"brief_markdown":{"type":"string","title":"Brief Markdown"},"precedentes_usados":{"items":{"$ref":"#/components/schemas/BriefPrecedente"},"type":"array","title":"Precedentes Usados"},"estandares_aplicados":{"items":{"$ref":"#/components/schemas/BriefEstandar"},"type":"array","title":"Estandares Aplicados"},"verified_citations":{"items":{"type":"string"},"type":"array","title":"Verified Citations"},"unverified_citations":{"items":{"type":"string"},"type":"array","title":"Unverified Citations"},"model":{"type":"string","title":"Model"},"disclaimer":{"type":"string","title":"Disclaimer"}},"type":"object","required":["template_id","template_label","sections","brief_markdown","model","disclaimer"],"title":"BriefV2Response"},"CWImportRequest":{"properties":{"rows":{"items":{"$ref":"#/components/schemas/CWImportRow"},"type":"array","title":"Rows"},"replace":{"type":"boolean","title":"Replace","default":false}},"type":"object","required":["rows"],"title":"CWImportRequest"},"CWImportRow":{"properties":{"sentencia_id":{"type":"string","title":"Sentencia Id"},"sentencia_tipo":{"type":"string","title":"Sentencia Tipo"},"sentencia_numero":{"type":"integer","title":"Sentencia Numero"},"sentencia_anio":{"type":"integer","title":"Sentencia Anio"},"fecha_sentencia":{"type":"string","title":"Fecha Sentencia"},"sala":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sala"},"magistrado_ponente":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Magistrado Ponente"},"expediente_numero":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expediente Numero"},"url_html":{"type":"string","title":"Url Html"},"url_pdf":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url Pdf"},"sha256_html":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sha256 Html"},"es_tutela_vs_laudo":{"type":"boolean","title":"Es Tutela Vs Laudo"},"confianza_clasif":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Confianza Clasif"},"causales_alegadas":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Causales Alegadas"},"resultado":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Resultado"},"ordenes_resumen":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ordenes Resumen"},"centro_arbitral":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Centro Arbitral"},"ciudad_arbitral":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ciudad Arbitral"},"fecha_laudo":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fecha Laudo"},"arbitros_nombres":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Arbitros Nombres"},"partes_accionantes":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Partes Accionantes"},"partes_accionadas":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Partes Accionadas"},"es_parte_estatal":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Es Parte Estatal"},"radicado_anulacion":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Radicado Anulacion"},"anulacion_corte":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Anulacion Corte"},"laudo_id_match":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Laudo Id Match"},"match_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Match Score"},"match_tier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Match Tier"},"pipeline_version":{"type":"string","title":"Pipeline Version","default":"v1"},"notas_revision":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notas Revision"}},"type":"object","required":["sentencia_id","sentencia_tipo","sentencia_numero","sentencia_anio","fecha_sentencia","url_html","es_tutela_vs_laudo"],"title":"CWImportRow"},"ChatCitation":{"properties":{"id":{"type":"integer","title":"Id"},"chunk_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Chunk Id"},"caso_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Caso Id"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"},"año":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Año"},"seccion":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Seccion"},"snippet":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Snippet"},"score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Score"}},"type":"object","required":["id"],"title":"ChatCitation"},"ChatMessage":{"properties":{"role":{"type":"string","title":"Role","description":"user | assistant"},"content":{"type":"string","title":"Content"}},"type":"object","required":["role","content"],"title":"ChatMessage"},"ChatRequest":{"properties":{"messages":{"items":{"$ref":"#/components/schemas/ChatMessage"},"type":"array","minItems":1,"title":"Messages"},"top_k":{"type":"integer","maximum":20.0,"minimum":1.0,"title":"Top K","default":10},"model":{"type":"string","title":"Model","description":"Anthropic model. PRO mode usa claude-opus-4-7.","default":"claude-sonnet-4-6"},"pro":{"type":"boolean","title":"Pro","description":"Modo PRO: opus-4-7 + top_k mayor","default":false},"filters":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Filters","description":"sources/años/materia/decision opcionales"}},"type":"object","required":["messages"],"title":"ChatRequest"},"ChatResponse":{"properties":{"response":{"type":"string","title":"Response"},"citations":{"items":{"$ref":"#/components/schemas/ChatCitation"},"type":"array","title":"Citations"},"n_chunks_used":{"type":"integer","title":"N Chunks Used"},"model":{"type":"string","title":"Model"}},"type":"object","required":["response","citations","n_chunks_used","model"],"title":"ChatResponse"},"CheckoutRequest":{"properties":{"plan":{"type":"string","title":"Plan","default":"pro"},"success_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Success Url"},"cancel_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cancel Url"}},"type":"object","title":"CheckoutRequest"},"CitaDetectada":{"properties":{"tipo":{"type":"string","title":"Tipo"},"raw":{"type":"string","title":"Raw"},"normalized":{"type":"string","title":"Normalized"},"span":{"prefixItems":[{"type":"integer"},{"type":"integer"}],"type":"array","maxItems":2,"minItems":2,"title":"Span"},"resolved_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Resolved Url"},"meta":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Meta"}},"type":"object","required":["tipo","raw","normalized","span"],"title":"CitaDetectada"},"CleanArbitrosDecisionsRequest":{"properties":{"dry_run":{"type":"boolean","title":"Dry Run","description":"Si True (default), solo audita y reporta cuántas filas se actualizarían. Si False, hace BACKUP + UPDATEs reales.","default":true}},"type":"object","title":"CleanArbitrosDecisionsRequest"},"CoherenciaLaudoRequest":{"properties":{"pretensiones":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Pretensiones","description":"Lista de pretensiones (texto). Alternativa a pretensiones_texto."},"excepciones":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Excepciones","description":"Lista de excepciones (texto). Opcional."},"resuelve_points":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Resuelve Points","description":"Lista de numerales de la parte resolutiva."},"pretensiones_texto":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pretensiones Texto","description":"Texto plano con pretensiones numeradas. Parseado server-side."},"excepciones_texto":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Excepciones Texto","description":"Texto plano con excepciones."},"resuelve_puntos_texto":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Resuelve Puntos Texto","description":"Texto plano con la parte resolutiva (PRIMERO/SEGUNDO/...)."}},"type":"object","title":"CoherenciaLaudoRequest"},"ContrafactualRequest":{"properties":{"caso_base":{"$ref":"#/components/schemas/SimularCasoRequest"},"variar_campo":{"type":"string","title":"Variar Campo","description":"Campo a variar: n_arbitros | centro | cuantia_pretendida_cop | tipo_convocante | tipo_convocada"},"variar_nuevo_valor":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"number"},{"type":"null"}],"title":"Variar Nuevo Valor"}},"type":"object","required":["caso_base","variar_campo","variar_nuevo_valor"],"title":"ContrafactualRequest"},"CostasInput":{"properties":{"cuantia":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Cuantia"},"tarifa_centro_cop":{"type":"number","title":"Tarifa Centro Cop","default":0.0},"porcentaje_agencia":{"type":"number","title":"Porcentaje Agencia","default":0.0},"gastos_secretaria_cop":{"type":"number","title":"Gastos Secretaria Cop","default":0.0},"honorarios_peritos_cop":{"type":"number","title":"Honorarios Peritos Cop","default":0.0}},"type":"object","title":"CostasInput"},"DisclosureCheckRequest":{"properties":{"arbitro_name":{"type":"string","minLength":3,"title":"Arbitro Name","description":"Nombre del árbitro nominado"},"partes":{"items":{"type":"string"},"type":"array","title":"Partes","description":"Partes del proceso (demandante/demandada)"},"apoderados":{"items":{"type":"string"},"type":"array","title":"Apoderados","description":"Apoderados de las partes"},"firmas":{"items":{"type":"string"},"type":"array","title":"Firmas","description":"Firmas legales involucradas"}},"type":"object","required":["arbitro_name"],"title":"DisclosureCheckRequest"},"DisclosureCheckResponse":{"properties":{"arbitro_name":{"type":"string","title":"Arbitro Name"},"conflicts":{"items":{"$ref":"#/components/schemas/DisclosureConflict"},"type":"array","title":"Conflicts"},"n_total":{"type":"integer","title":"N Total"},"cached":{"type":"boolean","title":"Cached","default":false}},"type":"object","required":["arbitro_name","conflicts","n_total"],"title":"DisclosureCheckResponse"},"DisclosureConflict":{"properties":{"type":{"type":"string","title":"Type"},"entity":{"type":"string","title":"Entity"},"count":{"type":"integer","title":"Count"},"casos":{"items":{"$ref":"#/components/schemas/DisclosureConflictCase"},"type":"array","title":"Casos"}},"type":"object","required":["type","entity","count","casos"],"title":"DisclosureConflict"},"DisclosureConflictCase":{"properties":{"caso_id":{"type":"string","title":"Caso Id"},"source":{"type":"string","title":"Source"},"año":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Año"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"convocante":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Convocante"},"convocada":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Convocada"},"rol":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rol"}},"type":"object","required":["caso_id","source"],"title":"DisclosureConflictCase"},"EditorLaudoCheckRequest":{"properties":{"texto":{"type":"string","title":"Texto","description":"Texto markdown del laudo en construcción."},"analisis_profundo":{"type":"boolean","title":"Analisis Profundo","description":"Si true, ejecuta análisis con Claude Haiku 4.5 (opt-in, Pro o cuota free).","default":false}},"type":"object","required":["texto"],"title":"EditorLaudoCheckRequest"},"ErrorLogRequest":{"properties":{"message":{"type":"string","title":"Message"},"stack":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stack"},"url":{"type":"string","title":"Url"},"user_agent":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Agent"},"timestamp":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Timestamp"},"user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Id"},"component":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Component"},"extra":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Extra"}},"type":"object","required":["message","url"],"title":"ErrorLogRequest"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"IndexacionIPCInput":{"properties":{"monto":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Monto"},"anio_origen":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Anio Origen"},"anio_final":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Anio Final"},"tabla_ipc":{"anyOf":[{"additionalProperties":{"type":"number"},"type":"object"},{"type":"null"}],"title":"Tabla Ipc","description":"Tabla anual manual {'2022':0.1312,...}. Opcional; si se omite se usa la tabla DANE embebida."}},"type":"object","title":"IndexacionIPCInput"},"IntCorrientesInput":{"properties":{"capital":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Capital"},"tasa_ea":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Tasa Ea","description":"Tasa efectiva anual (0.20 = 20%)."},"fecha_inicio":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fecha Inicio"},"fecha_fin":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fecha Fin"},"periodicidad":{"type":"string","title":"Periodicidad","default":"mensual"},"composicion":{"type":"string","title":"Composicion","default":"compuesta"}},"type":"object","title":"IntCorrientesInput"},"IntMoratoriosInput":{"properties":{"capital":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Capital"},"tasa_moratoria_ea":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Tasa Moratoria Ea","description":"Tasa de mora EA. Tipicamente 1.5x corriente."},"fecha_inicio":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fecha Inicio"},"fecha_fin":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fecha Fin"},"periodicidad":{"type":"string","title":"Periodicidad","default":"mensual"},"composicion":{"type":"string","title":"Composicion","default":"compuesta"}},"type":"object","title":"IntMoratoriosInput"},"LLMAuditEntry":{"properties":{"feature":{"type":"string","title":"Feature"},"entidad_tipo":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Entidad Tipo"},"entidad_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Entidad Ref"},"prompt_version":{"type":"string","title":"Prompt Version"},"model_id":{"type":"string","title":"Model Id"},"input_facts_json":{"additionalProperties":true,"type":"object","title":"Input Facts Json"},"output_text":{"type":"string","title":"Output Text"},"output_mapping":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Output Mapping"},"validation_status":{"type":"string","title":"Validation Status"},"rejection_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rejection Reason"}},"type":"object","required":["feature","prompt_version","model_id","input_facts_json","output_text","validation_status"],"title":"LLMAuditEntry"},"LLMAuditSpotCheck":{"properties":{"status":{"type":"string","title":"Status"},"reviewer":{"type":"string","title":"Reviewer"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","required":["status","reviewer"],"title":"LLMAuditSpotCheck"},"LaudoBacktestRequest":{"properties":{"caso_id":{"type":"string","title":"Caso Id","description":"Caso del corpus, e.g. '150169'"},"source":{"type":"string","title":"Source","description":"ccb|ccm|ccc|cart|ce|intl|externado"}},"type":"object","required":["caso_id","source"],"title":"LaudoBacktestRequest"},"LucroCesanteInput":{"properties":{"monto_mensual":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Monto Mensual"},"tasa_oportunidad_ea":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Tasa Oportunidad Ea"},"meses":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Meses"}},"type":"object","title":"LucroCesanteInput"},"MetricaCanonicaUpsert":{"properties":{"nombre_canonico":{"type":"string","title":"Nombre Canonico","description":"Slug único, ej. 'orange_list_score'"},"etiqueta_ui":{"type":"string","title":"Etiqueta Ui"},"formula_latex":{"type":"string","title":"Formula Latex"},"fuente_datos":{"type":"string","title":"Fuente Datos"},"ventana_temporal":{"type":"string","title":"Ventana Temporal"},"version_semver":{"type":"string","title":"Version Semver"},"fecha_actualizado":{"type":"string","title":"Fecha Actualizado"},"owner":{"type":"string","title":"Owner"},"disclaimer":{"type":"string","title":"Disclaimer"},"url_metodologia":{"type":"string","title":"Url Metodologia"},"metodologia_ic":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Metodologia Ic"},"n_muestra":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"N Muestra"}},"type":"object","required":["nombre_canonico","etiqueta_ui","formula_latex","fuente_datos","ventana_temporal","version_semver","fecha_actualizado","owner","disclaimer","url_metodologia"],"title":"MetricaCanonicaUpsert"},"MigrateDbV2Request":{"properties":{"dry_run":{"type":"boolean","title":"Dry Run","description":"Si True, solo audita schema y parquets sin tocar la DB.","default":false},"force_recolumn":{"type":"boolean","title":"Force Recolumn","description":"Si True, DROP + ADD las columnas v2 antes de poblar (peligroso, solo para fix de schema). Si dry_run=True, este flag se ignora.","default":false}},"type":"object","title":"MigrateDbV2Request"},"NewsletterConfirmRequest":{"properties":{"token":{"type":"string","title":"Token"}},"type":"object","required":["token"],"title":"NewsletterConfirmRequest"},"NewsletterRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"nombre":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Nombre"},"rol":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rol"},"persona":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Persona"},"interests":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Interests"},"fuente":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fuente"}},"type":"object","required":["email"],"title":"NewsletterRequest"},"NewsletterUnsubscribeRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"}},"type":"object","required":["email"],"title":"NewsletterUnsubscribeRequest"},"PactoAnalisisRequest":{"properties":{"pacto_texto":{"type":"string","maxLength":20000,"minLength":50,"title":"Pacto Texto"}},"type":"object","required":["pacto_texto"],"title":"PactoAnalisisRequest"},"ParseCitasRequest":{"properties":{"texto":{"type":"string","maxLength":20000,"minLength":10,"title":"Texto"},"resolver":{"type":"boolean","title":"Resolver","default":true}},"type":"object","required":["texto"],"title":"ParseCitasRequest"},"ParseCitasResponse":{"properties":{"n_citas":{"type":"integer","title":"N Citas"},"citas":{"items":{"$ref":"#/components/schemas/CitaDetectada"},"type":"array","title":"Citas"},"texto_enriquecido_html":{"type":"string","title":"Texto Enriquecido Html"}},"type":"object","required":["n_citas","citas","texto_enriquecido_html"],"title":"ParseCitasResponse"},"PredictOutcomeRequest":{"properties":{"hechos":{"type":"string","title":"Hechos","description":"Descripción del caso (4-20 frases)"},"materia":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Materia"},"tipo_contrato":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tipo Contrato"},"convocante":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Convocante"},"convocada":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Convocada"},"monto_pretendido_cop":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Monto Pretendido Cop"},"k_precedents":{"type":"integer","maximum":10.0,"minimum":3.0,"title":"K Precedents","default":5},"model":{"type":"string","title":"Model","description":"claude-haiku-4-5 | claude-sonnet-4-5","default":"claude-haiku-4-5"}},"type":"object","required":["hechos"],"title":"PredictOutcomeRequest"},"PreflightRequest":{"properties":{"counsel_dedup_keys":{"items":{"type":"string"},"type":"array","title":"Counsel Dedup Keys","description":"dedup_key de apoderados del caso candidato (apoderados_canonical_v2)"},"parte_dedup_keys":{"items":{"type":"string"},"type":"array","title":"Parte Dedup Keys","description":"dedup_key de partes del caso candidato (partes_canonical_v2)"},"centro":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Centro","description":"Centro administrador (ccb|ccm|ccc|cart|intl|...)"},"materia_proxy":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Materia Proxy","description":"Materia para correlación 3.1.5 (no impl hoy)"}},"type":"object","title":"PreflightRequest"},"RevealRequest":{"properties":{"token":{"type":"string","title":"Token","description":"Token anonimizado, e.g. [PERSONA_a3f4b2]"},"doc_id":{"type":"string","title":"Doc Id","description":"source::caso_id, e.g. ccb::1234"}},"type":"object","required":["token","doc_id"],"title":"RevealRequest"},"SearchHit":{"properties":{"chunk_id":{"type":"string","title":"Chunk Id"},"source":{"type":"string","title":"Source"},"caso_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Caso Id"},"año":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Año"},"seccion":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Seccion"},"score":{"type":"number","title":"Score"},"score_dense":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Score Dense"},"score_bm25":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Score Bm25"},"text":{"type":"string","title":"Text"},"snippet":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Snippet"},"relevance":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Relevance"},"materia":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Materia"},"decision":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Decision"},"partes_short":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Partes Short"},"doctype":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Doctype"},"fecha":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fecha"},"magistrado_ponente":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Magistrado Ponente"},"tema_principal":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tema Principal"},"resumen":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Resumen"},"radicado":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Radicado"},"url_origen":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url Origen"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"},"ai_reranked":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Ai Reranked"}},"type":"object","required":["chunk_id","source","caso_id","año","seccion","score","text"],"title":"SearchHit"},"SearchRequest":{"properties":{"query":{"type":"string","title":"Query","description":"Query text"},"top_k":{"type":"integer","maximum":100.0,"minimum":1.0,"title":"Top K","default":10},"sources":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Sources","description":"Filter by source (ccb/ccc/...)"},"centros":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Centros","description":"Alias de sources (códigos de centro)"},"años":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Años","description":"Filter by año (lista discreta)"},"years_from":{"anyOf":[{"type":"integer","maximum":2100.0,"minimum":1900.0},{"type":"null"}],"title":"Years From","description":"Año mínimo (inclusive)"},"years_to":{"anyOf":[{"type":"integer","maximum":2100.0,"minimum":1900.0},{"type":"null"}],"title":"Years To","description":"Año máximo (inclusive)"},"materia":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Materia","description":"Filter by materia (substring match en corpus_meta.materia)"},"materias":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Materias","description":"Lista de materias (OR entre items, substring match)"},"decision":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Decision","description":"Filter por decisión (legacy: single value)"},"decisions":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Decisions","description":"Lista de decisiones (PROSPERA|NIEGA|MIXTO|ANULADO o códigos legacy)"},"cuantia_min":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Cuantia Min","description":"Cuantía pretendida mínima en COP"},"cuantia_max":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Cuantia Max","description":"Cuantía pretendida máxima en COP"},"parte":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parte","description":"Filter by parte (substring match en NER PARTE_CORP)"},"document_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Document Type","description":"Filter by document_type: laudo | jurisprudencia"},"mode":{"type":"string","title":"Mode","description":"hybrid | dense | bm25","default":"hybrid"},"rerank":{"type":"boolean","title":"Rerank","description":"K2: re-rank top hits con BGE-reranker-v2-m3 (cross-encoder, +5-10pp MRR)","default":false},"expand":{"type":"boolean","title":"Expand","description":"S3.2: expandir query con diccionario de sinónimos jurídicos antes de BM25","default":true},"llm_rerank":{"type":"boolean","title":"Llm Rerank","description":"Search v3: reranking adicional con Claude Haiku 4.5 (feature Pro, +2-4s latencia)","default":false}},"type":"object","required":["query"],"title":"SearchRequest"},"SearchResponse":{"properties":{"query":{"type":"string","title":"Query"},"mode":{"type":"string","title":"Mode"},"n_hits":{"type":"integer","title":"N Hits"},"hits":{"items":{"$ref":"#/components/schemas/SearchHit"},"type":"array","title":"Hits"},"suggestion":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Suggestion"},"llm_reranked":{"type":"boolean","title":"Llm Reranked","default":false},"event_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Event Id"}},"type":"object","required":["query","mode","n_hits","hits"],"title":"SearchResponse"},"SimularBatchCaso":{"properties":{"cuantia_pretendida_cop":{"type":"number","title":"Cuantia Pretendida Cop"},"centro":{"type":"string","title":"Centro","default":"ccb"},"n_arbitros":{"type":"integer","title":"N Arbitros","default":3},"tipo_convocante":{"type":"string","title":"Tipo Convocante","default":"privado"},"tipo_convocada":{"type":"string","title":"Tipo Convocada","default":"privado"},"pacto_equidad":{"type":"boolean","title":"Pacto Equidad","default":false},"reconvencion":{"type":"boolean","title":"Reconvencion","default":false},"descripcion":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Descripcion"},"anio":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Anio"}},"type":"object","required":["cuantia_pretendida_cop"],"title":"SimularBatchCaso","description":"Caso base para la matriz comparativa. Mismos campos que\nSimularCasoRequest pero sin `materia` (cada celda inyecta la suya)."},"SimularBatchRequest":{"properties":{"caso":{"$ref":"#/components/schemas/SimularBatchCaso"},"arbitros":{"items":{"type":"string"},"type":"array","title":"Arbitros","description":"2-5 arbitro_ids para comparar (deduplicados)."},"materias":{"items":{"type":"string"},"type":"array","title":"Materias","description":"1-3 materias del corpus para comparar (subconjunto de /api/laudos/materias)."}},"type":"object","required":["caso"],"title":"SimularBatchRequest"},"SimularCasoRequest":{"properties":{"materia":{"type":"string","title":"Materia"},"cuantia_pretendida_cop":{"type":"number","title":"Cuantia Pretendida Cop"},"centro":{"type":"string","title":"Centro"},"n_arbitros":{"type":"integer","title":"N Arbitros"},"tipo_convocante":{"type":"string","title":"Tipo Convocante","default":"privado"},"tipo_convocada":{"type":"string","title":"Tipo Convocada","default":"privado"},"pacto_equidad":{"type":"boolean","title":"Pacto Equidad","default":false},"reconvencion":{"type":"boolean","title":"Reconvencion","default":false},"n_pretensiones":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"N Pretensiones"}},"type":"object","required":["materia","cuantia_pretendida_cop","centro","n_arbitros"],"title":"SimularCasoRequest"},"SimularTribunalCaso":{"properties":{"materia":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Materia"},"centro":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Centro"},"cuantia_pretendida_cop":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Cuantia Pretendida Cop"},"partes":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Partes"},"convocante":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Convocante"},"convocada":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Convocada"},"descripcion":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Descripcion"}},"type":"object","title":"SimularTribunalCaso","description":"Schema mínimo de un caso para /lab/simular-tribunal.\n\nTodos los campos son opcionales — el predictor degrada gracefully cuando\nfalta información. `partes` permite detectar conflictos árbitro-parte.\nEs un superset relajado de SimularCasoRequest (definido más abajo para\n/lab/simular-caso) para que el tribunal-simulator no exija cuantía ni\nn_arbitros mínimos."},"SimularTribunalRequest":{"properties":{"arbitro_ids":{"items":{"type":"string"},"type":"array","title":"Arbitro Ids","description":"1-3 árbitros que conforman el panel"},"caso":{"$ref":"#/components/schemas/SimularTribunalCaso"}},"type":"object","required":["arbitro_ids","caso"],"title":"SimularTribunalRequest"},"TargetCardSummary":{"properties":{"node_id":{"type":"string","title":"Node Id"},"node_type":{"type":"string","title":"Node Type"},"canonical":{"type":"string","title":"Canonical"},"incoming_count":{"type":"integer","title":"Incoming Count"},"pagerank":{"type":"number","title":"Pagerank"}},"type":"object","required":["node_id","node_type","canonical","incoming_count","pagerank"],"title":"TargetCardSummary"},"TokenRequest":{"properties":{"master_password":{"type":"string","title":"Master Password"}},"type":"object","required":["master_password"],"title":"TokenRequest"},"TokenResponse":{"properties":{"access_token":{"type":"string","title":"Access Token"},"token_type":{"type":"string","title":"Token Type","default":"bearer"},"expires_in":{"type":"integer","title":"Expires In"}},"type":"object","required":["access_token","expires_in"],"title":"TokenResponse"},"TribunalCreateRequest":{"properties":{"fecha_instalacion":{"type":"string","title":"Fecha Instalacion","description":"ISO YYYY-MM-DD"},"centro":{"type":"string","title":"Centro","description":"ccb|ccm|ccc|cart|cucuta|barranquilla|otro","default":"ccb"},"partes":{"anyOf":[{"type":"string","maxLength":400},{"type":"null"}],"title":"Partes","description":"Ej: 'Acme S.A. vs Beta S.A.S.'"},"materia":{"anyOf":[{"type":"string","maxLength":80},{"type":"null"}],"title":"Materia"},"cuantia_cop":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Cuantia Cop"},"prorroga":{"type":"boolean","title":"Prorroga","default":false},"tribunal_id":{"anyOf":[{"type":"string","maxLength":120},{"type":"null"}],"title":"Tribunal Id","description":"ID externo opcional (radicado del centro)"}},"type":"object","required":["fecha_instalacion"],"title":"TribunalCreateRequest"},"UsageReportRequest":{"properties":{"feature":{"type":"string","title":"Feature"}},"type":"object","required":["feature"],"title":"UsageReportRequest"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"WorkspaceSyncRequest":{"properties":{"followed":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Followed"},"briefs":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Briefs"},"notes":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Notes"},"pinned":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Pinned"}},"type":"object","title":"WorkspaceSyncRequest"},"_AlertsFollowRequest":{"properties":{"type":{"type":"string","title":"Type"},"entity_id":{"type":"string","title":"Entity Id"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"}},"type":"object","required":["type","entity_id"],"title":"_AlertsFollowRequest"},"_AlertsPrefsRequest":{"properties":{"frequency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Frequency"},"events":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Events"}},"type":"object","title":"_AlertsPrefsRequest"},"_S14CreateApiKeyRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"purpose":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Purpose"}},"type":"object","required":["email"],"title":"_S14CreateApiKeyRequest"},"_S14RevokeRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"}},"type":"object","required":["email"],"title":"_S14RevokeRequest"},"_S15MagicLinkRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"redirect_to":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Redirect To","default":"/workspace"}},"type":"object","required":["email"],"title":"_S15MagicLinkRequest"},"_S16ApiKeysCreateRequest":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"purpose":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Purpose"}},"type":"object","title":"_S16ApiKeysCreateRequest"},"_S21AnClickRequest":{"properties":{"event_id":{"type":"string","maxLength":64,"minLength":8,"title":"Event Id"},"caso_id":{"type":"string","maxLength":256,"minLength":1,"title":"Caso Id"}},"type":"object","required":["event_id","caso_id"],"title":"_S21AnClickRequest"},"_S25D1PlazosRequest":{"properties":{"fecha_instalacion":{"type":"string","title":"Fecha Instalacion","description":"Fecha de instalación del tribunal (T0), formato YYYY-MM-DD.","examples":["2026-03-15"]},"centro":{"type":"string","enum":["ccb","ccm","ccc","cart","cucuta","barranquilla","otro"],"title":"Centro","description":"Centro arbitral.","default":"ccb"},"cuantia_cop":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Cuantia Cop","description":"Cuantía pretendida en COP (opcional, marca casos de cuantía mayor)."},"materia":{"anyOf":[{"type":"string","maxLength":120},{"type":"null"}],"title":"Materia","description":"Materia del proceso (libre)."},"prorroga_acordada":{"type":"boolean","title":"Prorroga Acordada","description":"Si las partes acordaron prórroga (Art. 10 § 4 Ley 1563): el plazo del laudo se extiende a 12 meses desde la primera audiencia de trámite.","default":false}},"type":"object","required":["fecha_instalacion"],"title":"_S25D1PlazosRequest","description":"Inputs del verificador de plazos del tribunal."}}}}