{"components":{"schemas":{"Alerta":{"properties":{"contrato":{"$ref":"#/components/schemas/Contrato"},"descricao":{"nullable":true,"type":"string"},"id":{"type":"integer"},"score":{"nullable":true,"type":"number"},"severidade":{"type":"string"},"status":{"nullable":true,"type":"string"},"tipo":{"type":"string"},"valor_referencia":{"nullable":true,"type":"number"}},"type":"object"},"AlertasPage":{"allOf":[{"$ref":"#/components/schemas/Paginacao"},{"properties":{"items":{"items":{"$ref":"#/components/schemas/Alerta"},"type":"array"}},"type":"object"}]},"Contrato":{"properties":{"data_assinatura":{"nullable":true,"type":"string"},"fornecedor":{"nullable":true,"type":"string"},"fornecedor_ni":{"nullable":true,"type":"string"},"municipio_ibge":{"nullable":true,"type":"string"},"municipio_nome":{"nullable":true,"type":"string"},"objeto":{"type":"string"},"orgao":{"nullable":true,"type":"string"},"pncp":{"description":"N\u00famero de controle PNCP.","type":"string"},"valor_global":{"nullable":true,"type":"number"}},"type":"object"},"ContratosPage":{"allOf":[{"$ref":"#/components/schemas/Paginacao"},{"properties":{"items":{"items":{"$ref":"#/components/schemas/Contrato"},"type":"array"}},"type":"object"}]},"Erro":{"properties":{"error":{"type":"string"},"rate_limit":{"type":"boolean"}},"type":"object"},"Paginacao":{"properties":{"page":{"type":"integer"},"pages":{"type":"integer"},"per_page":{"type":"integer"},"total":{"type":"integer"}},"type":"object"},"Precisao":{"properties":{"itens":{"items":{"$ref":"#/components/schemas/PrecisaoItem"},"type":"array"},"min_amostra":{"type":"integer"},"rotulados_total":{"type":"integer"}},"type":"object"},"PrecisaoItem":{"properties":{"amostra_status":{"enum":["medida","amostra_insuficiente"],"type":"string"},"confirmados":{"type":"integer"},"descartados":{"type":"integer"},"pendentes":{"type":"integer"},"precisao":{"description":"Fra\u00e7\u00e3o 0\u20131, ou null se amostra insuficiente.","nullable":true,"type":"number"},"rotulados":{"type":"integer"},"tipo":{"type":"string"},"total":{"type":"integer"}},"type":"object"}}},"info":{"contact":{"name":"Sentinela RJ","url":"https://sentinela-rj.fly.dev"},"description":"API p\u00fablica de leitura do Sentinela RJ: alertas de anomalia em contratos p\u00fablicos, contratos monitorados e a precis\u00e3o medida de cada detector. Dados abertos do PNCP, livres para reuso jornal\u00edstico e acad\u00eamico. Somente leitura (GET); sem autentica\u00e7\u00e3o.\n\n**Limite de requisi\u00e7\u00f5es:** por IP. Ao exceder, a resposta \u00e9 `429` com `Retry-After`; os cabe\u00e7alhos `X-RateLimit-*` indicam o saldo.","license":{"name":"Dados abertos (PNCP)"},"title":"Sentinela RJ \u2014 API p\u00fablica","version":"1.0.0"},"openapi":"3.0.3","paths":{"/api/v1/alertas":{"get":{"description":"Alertas gerados pelos detectores, com o contrato associado. Filtre por tipo, severidade e munic\u00edpio.","parameters":[{"description":"Tipo do detector (ex.: outlier_valor, concentracao_fornecedor, sem_licitacao_dispensa).","in":"query","name":"tipo","schema":{"type":"string"}},{"description":"Severidade do alerta.","in":"query","name":"severidade","schema":{"enum":["alta","media","baixa"],"type":"string"}},{"description":"Filtra por c\u00f3digo IBGE do munic\u00edpio (ex.: 3304557 = Rio de Janeiro).","in":"query","name":"municipio_ibge","schema":{"type":"string"}},{"description":"P\u00e1gina (come\u00e7a em 1).","in":"query","name":"page","schema":{"default":1,"minimum":1,"type":"integer"}},{"description":"Itens por p\u00e1gina (m\u00e1ximo 100).","in":"query","name":"per_page","schema":{"default":20,"maximum":100,"minimum":1,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AlertasPage"}}},"description":"P\u00e1gina de alertas."},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}},"description":"Limite de requisi\u00e7\u00f5es excedido (rate limit)."}},"summary":"Lista alertas de anomalia"}},"/api/v1/contratos":{"get":{"description":"Contratos coletados do PNCP. Filtre por munic\u00edpio e por fornecedor (CNPJ).","parameters":[{"description":"Filtra por c\u00f3digo IBGE do munic\u00edpio (ex.: 3304557 = Rio de Janeiro).","in":"query","name":"municipio_ibge","schema":{"type":"string"}},{"description":"CNPJ do fornecedor (s\u00f3 d\u00edgitos).","in":"query","name":"fornecedor_ni","schema":{"type":"string"}},{"description":"P\u00e1gina (come\u00e7a em 1).","in":"query","name":"page","schema":{"default":1,"minimum":1,"type":"integer"}},{"description":"Itens por p\u00e1gina (m\u00e1ximo 100).","in":"query","name":"per_page","schema":{"default":20,"maximum":100,"minimum":1,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContratosPage"}}},"description":"P\u00e1gina de contratos."},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}},"description":"Limite de requisi\u00e7\u00f5es excedido (rate limit)."}},"summary":"Lista contratos monitorados"}},"/api/v1/precisao":{"get":{"description":"Taxa de acerto de cada detector = confirmados / (confirmados + descartados), lida da triagem humana real. Detectores com menos de `min_amostra` r\u00f3tulos aparecem como 'amostra_insuficiente'.","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Precisao"}}},"description":"Precis\u00e3o por detector."},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}},"description":"Limite de requisi\u00e7\u00f5es excedido (rate limit)."}},"summary":"Precis\u00e3o medida por detector"}}},"servers":[{"url":"https://sentinela-rj.fly.dev"}]}
