{
    "openapi": "3.0.3",
    "info": {
        "title": "Dados abertos — vagas e lista de espera da rede municipal",
        "version": "1.0.0",
        "description": "Dados estatísticos consolidados e anonimizados de vagas públicas e da lista de espera, por ano letivo. Acesso público, sem cadastro, somente leitura (GET). Formatos: JSON (padrão) ou CSV (?formato=csv). Dados abertos — uso livre com citação da fonte (Lei 12.527/2011, art. 8º; Decreto 8.777/2016)."
    },
    "servers": [
        {
            "url": "https://sage-seduc-ro.sistematech.com.br/dados-abertos/v1"
        }
    ],
    "paths": {
        "/vagas": {
            "get": {
                "summary": "Vagas públicas por escola, etapa e turno",
                "description": "Quantidade total de vagas, reservadas, ocupadas (matrículas no ano), alocadas (designações com vaga reservada) e disponíveis. Disponível = total − reservadas − (ocupadas + alocadas). Relatório interno correspondente: Secretaria › Vagas da rede › Quadro de vagas (super/vagas). Mesma consulta (Vagas_rede_model::quadro), portanto os números são idênticos.",
                "parameters": [
                    {
                        "name": "ano",
                        "in": "query",
                        "required": false,
                        "description": "Ano letivo (padrão: ano corrente).",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "school_id",
                        "in": "query",
                        "required": false,
                        "description": "Escola (ver /escolas).",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "etapa",
                        "in": "query",
                        "required": false,
                        "description": "Etapa de ensino.",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "creche",
                                "pre_escola",
                                "fundamental_ai",
                                "fundamental_af",
                                "medio",
                                "eja"
                            ]
                        }
                    },
                    {
                        "name": "turno",
                        "in": "query",
                        "required": false,
                        "description": "Turno.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "formato",
                        "in": "query",
                        "required": false,
                        "description": "json (padrão) ou csv.",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "json",
                                "csv"
                            ]
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Dados consolidados",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "dados": {
                                            "type": "array",
                                            "items": {
                                                "type": "object",
                                                "properties": {
                                                    "school_id": {
                                                        "type": "integer"
                                                    },
                                                    "escola": {
                                                        "type": "string"
                                                    },
                                                    "bairro": {
                                                        "type": "string"
                                                    },
                                                    "etapa": {
                                                        "type": "string"
                                                    },
                                                    "turno": {
                                                        "type": "string"
                                                    },
                                                    "total_vagas": {
                                                        "type": "integer"
                                                    },
                                                    "reservadas": {
                                                        "type": "integer"
                                                    },
                                                    "ocupadas": {
                                                        "type": "integer"
                                                    },
                                                    "alocadas": {
                                                        "type": "integer"
                                                    },
                                                    "disponivel": {
                                                        "type": "integer"
                                                    }
                                                }
                                            }
                                        },
                                        "totais": {
                                            "type": "object"
                                        },
                                        "meta": {
                                            "type": "object"
                                        }
                                    }
                                }
                            },
                            "text/csv": {
                                "schema": {
                                    "type": "string"
                                }
                            }
                        }
                    },
                    "400": {
                        "description": "Parâmetro inválido"
                    },
                    "405": {
                        "description": "Método não permitido (somente GET)"
                    },
                    "429": {
                        "description": "Limite de requisições por minuto excedido"
                    }
                }
            }
        },
        "/lista-espera": {
            "get": {
                "summary": "Solicitações na lista de espera por escola, etapa e nível",
                "description": "Contagem de solicitações por escola pretendida (a designada; sem designação, a 1ª opção; na inscrição por escola, a escola escolhida), etapa e nível/ano escolar, com o detalhamento por situação e por categoria de prioridade. Relatório interno correspondente: Secretaria › Vagas da rede › Fila única (super/vagas, aba Fila): o total da inscrição em modo rede é o número de linhas da fila (Vagas_rede_model::fila). Inscrições por escola: Matrícula online da escola (admin/matricula_inscricoes).",
                "parameters": [
                    {
                        "name": "ano",
                        "in": "query",
                        "required": false,
                        "description": "Ano letivo (padrão: ano corrente).",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "school_id",
                        "in": "query",
                        "required": false,
                        "description": "Escola pretendida.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "etapa",
                        "in": "query",
                        "required": false,
                        "description": "Etapa de ensino.",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "creche",
                                "pre_escola",
                                "fundamental_ai",
                                "fundamental_af",
                                "medio",
                                "eja"
                            ]
                        }
                    },
                    {
                        "name": "nivel",
                        "in": "query",
                        "required": false,
                        "description": "Nível/ano escolar (ex.: 1, 5, Bebês).",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "situacao",
                        "in": "query",
                        "required": false,
                        "description": "Situação da solicitação.",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "aguardando",
                                "espera",
                                "aprovado",
                                "confirmado",
                                "matriculado",
                                "cancelado",
                                "rejeitado"
                            ]
                        }
                    },
                    {
                        "name": "categoria",
                        "in": "query",
                        "required": false,
                        "description": "Categoria de prioridade.",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "pcd",
                                "irmao_na_rede",
                                "sem_prioridade"
                            ]
                        }
                    },
                    {
                        "name": "formato",
                        "in": "query",
                        "required": false,
                        "description": "json (padrão) ou csv.",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "json",
                                "csv"
                            ]
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Dados consolidados",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "dados": {
                                            "type": "array",
                                            "items": {
                                                "type": "object",
                                                "properties": {
                                                    "school_id": {
                                                        "type": "integer"
                                                    },
                                                    "escola": {
                                                        "type": "string"
                                                    },
                                                    "etapa": {
                                                        "type": "string"
                                                    },
                                                    "nivel": {
                                                        "type": "string"
                                                    },
                                                    "total": {
                                                        "type": "integer"
                                                    },
                                                    "por_situacao": {
                                                        "type": "object"
                                                    },
                                                    "por_categoria": {
                                                        "type": "object"
                                                    }
                                                }
                                            }
                                        },
                                        "totais": {
                                            "type": "object"
                                        },
                                        "meta": {
                                            "type": "object"
                                        }
                                    }
                                }
                            },
                            "text/csv": {
                                "schema": {
                                    "type": "string"
                                }
                            }
                        }
                    },
                    "400": {
                        "description": "Parâmetro inválido"
                    },
                    "405": {
                        "description": "Método não permitido (somente GET)"
                    },
                    "429": {
                        "description": "Limite de requisições por minuto excedido"
                    }
                }
            }
        },
        "/solicitacoes": {
            "get": {
                "summary": "Solicitações de ingresso e de transferência",
                "description": "Contagem de solicitações por tipo (ingresso | transferencia), etapa e situação, no ano letivo. Relatório interno correspondente: Mesma base da lista de espera (matricula_inscricao), separada pelo tipo da solicitação.",
                "parameters": [
                    {
                        "name": "ano",
                        "in": "query",
                        "required": false,
                        "description": "Ano letivo (padrão: ano corrente).",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "tipo",
                        "in": "query",
                        "required": false,
                        "description": "Tipo da solicitação.",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "ingresso",
                                "transferencia"
                            ]
                        }
                    },
                    {
                        "name": "etapa",
                        "in": "query",
                        "required": false,
                        "description": "Etapa de ensino.",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "creche",
                                "pre_escola",
                                "fundamental_ai",
                                "fundamental_af",
                                "medio",
                                "eja"
                            ]
                        }
                    },
                    {
                        "name": "formato",
                        "in": "query",
                        "required": false,
                        "description": "json (padrão) ou csv.",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "json",
                                "csv"
                            ]
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Dados consolidados",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "dados": {
                                            "type": "array",
                                            "items": {
                                                "type": "object",
                                                "properties": {
                                                    "tipo": {
                                                        "type": "string"
                                                    },
                                                    "etapa": {
                                                        "type": "string"
                                                    },
                                                    "total": {
                                                        "type": "integer"
                                                    },
                                                    "por_situacao": {
                                                        "type": "object"
                                                    }
                                                }
                                            }
                                        },
                                        "totais": {
                                            "type": "object"
                                        },
                                        "meta": {
                                            "type": "object"
                                        }
                                    }
                                }
                            },
                            "text/csv": {
                                "schema": {
                                    "type": "string"
                                }
                            }
                        }
                    },
                    "400": {
                        "description": "Parâmetro inválido"
                    },
                    "405": {
                        "description": "Método não permitido (somente GET)"
                    },
                    "429": {
                        "description": "Limite de requisições por minuto excedido"
                    }
                }
            }
        },
        "/escolas": {
            "get": {
                "summary": "Escolas que ofertam vagas ou recebem solicitações no ano",
                "description": "Identificador público, nome e bairro — para montar os filtros dos demais endpoints. Relatório interno correspondente: Cadastro de escolas da rede.",
                "parameters": [
                    {
                        "name": "ano",
                        "in": "query",
                        "required": false,
                        "description": "Ano letivo (padrão: ano corrente).",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "formato",
                        "in": "query",
                        "required": false,
                        "description": "json (padrão) ou csv.",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "json",
                                "csv"
                            ]
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Dados consolidados",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "dados": {
                                            "type": "array",
                                            "items": {
                                                "type": "object",
                                                "properties": {
                                                    "school_id": {
                                                        "type": "integer"
                                                    },
                                                    "escola": {
                                                        "type": "string"
                                                    },
                                                    "bairro": {
                                                        "type": "string"
                                                    }
                                                }
                                            }
                                        },
                                        "totais": {
                                            "type": "object"
                                        },
                                        "meta": {
                                            "type": "object"
                                        }
                                    }
                                }
                            },
                            "text/csv": {
                                "schema": {
                                    "type": "string"
                                }
                            }
                        }
                    },
                    "400": {
                        "description": "Parâmetro inválido"
                    },
                    "405": {
                        "description": "Método não permitido (somente GET)"
                    },
                    "429": {
                        "description": "Limite de requisições por minuto excedido"
                    }
                }
            }
        }
    }
}