# Especificação Técnica — Portal de Transparência PNTP 2026

## 1. Arquitetura de Informação

### 1.1 Mapa do Site

```
/
├── /transparencia              → Portal de Transparência (página inicial)
├── /transparencia/institucional
│   ├── /estrutura-organizacional
│   ├── /competencias
│   ├── /responsaveis
│   ├── /contato                → Endereços, telefones, e-mails, horário
│   ├── /atos-normativos
│   └── /faq
├── /transparencia/receita
│   ├── /previsao-realizacao
│   ├── /classificacao-orcamentaria
│   └── /divida-ativa
├── /transparencia/despesa
│   ├── /empenhado-liquidado-pago
│   ├── /classificacao-orcamentaria
│   ├── /empenhos               → Detalhamento individual
│   ├── /aquisicoes              → Estatais
│   ├── /patrocinios            → Estatais
│   └── /publicidade            → Estatais
├── /transparencia/convenios
│   ├── /recebidos
│   ├── /realizados
│   └── /acordos-sem-recursos
├── /transparencia/recursos-humanos
│   ├── /servidores
│   ├── /remuneracao
│   ├── /tabela-remuneratoria
│   ├── /estagiarios
│   ├── /terceirizados
│   ├── /editais-concursos
│   └── /atos-concursos
├── /transparencia/diarias
│   ├── /beneficiarios
│   └── /tabela-valores
├── /transparencia/licitacoes
│   ├── /relacao
│   ├── /editais
│   ├── /documentos
│   ├── /dispensas
│   ├── /atas-adesao-srp
│   ├── /plano-contratacoes     → PAC
│   └── /sancionados
├── /transparencia/contratos
│   ├── /relacao
│   ├── /inteiro-teor
│   ├── /fiscais
│   └── /ordem-pagamentos
├── /transparencia/obras
│   ├── /informacoes
│   ├── /quantitativos-contratados
│   ├── /quantitativos-executados
│   └── /paralisadas
├── /transparencia/planejamento
│   ├── /balanco-geral
│   ├── /relatorio-gestao
│   ├── /decisao-tc
│   ├── /julgamento-legislativo
│   ├── /rgf
│   ├── /rreo
│   ├── /plano-estrategico
│   ├── /ppa
│   ├── /ldo
│   └── /loa
├── /transparencia/sic
│   ├── /unidade-responsavel
│   ├── /formulario             → e-SIC
│   ├── /norma-lai
│   ├── /prazos                 → Recomendado
│   ├── /relatorio-estatistico
│   ├── /classificados
│   └── /desclassificados
├── /transparencia/acessibilidade
│   └── /mapa-do-site
├── /transparencia/ouvidoria
│   ├── /atendimento
│   ├── /canal-eletronico
│   └── /carta-servicos
├── /transparencia/lgpd
│   ├── /encarregado
│   ├── /politica-privacidade  → Recomendado
│   ├── /servicos-digitais
│   ├── /dados-abertos
│   ├── /regulamentacao-gd      → Recomendado
│   └── /pesquisas-satisfacao
├── /pesquisa                   → Busca geral
└── /dados-abertos              → API e dados estruturados
```

## 2. Especificação de APIs

### 2.1 API REST para Dados Abertos

```yaml
# OpenAPI 3.0
openapi: 3.0.0
info:
  title: API de Dados Abertos - Portal Transparência
  version: 1.0.0
paths:
  /api/v1/receita:
    get:
      summary: Dados de receita
      parameters:
        - name: ano
          in: query
          schema: { type: integer }
        - name: mes
          in: query
          schema: { type: integer }
      responses:
        '200':
          content:
            application/json: {}
            text/csv: {}
            application/vnd.openxmlformats-officedocument.spreadsheetml.sheet: {}

  /api/v1/despesa:
    get:
      summary: Dados de despesa
      parameters:
        - name: ano
          in: query
          schema: { type: integer }
        - name: mes
          in: query
          schema: { type: integer }
        - name: empenho
          in: query
          schema: { type: string }
      responses:
        '200':
          content:
            application/json: {}
            text/csv: {}

  /api/v1/licitacoes:
    get:
      summary: Dados de licitações
      parameters:
        - name: ano
          in: query
          schema: { type: integer }
        - name: modalidade
          in: query
          schema: { type: string }
        - name: situacao
          in: query
          schema: { type: string }
      responses:
        '200':
          content:
            application/json: {}
            text/csv: {}

  /api/v1/contratos:
    get:
      summary: Dados de contratos
      parameters:
        - name: ano
          in: query
          schema: { type: integer }
      responses:
        '200':
          content:
            application/json: {}
            text/csv: {}

  /api/v1/servidores:
    get:
      summary: Dados de servidores
      parameters:
        - name: nome
          in: query
          schema: { type: string }
      responses:
        '200':
          content:
            application/json: {}
            text/csv: {}

  /api/v1/diarias:
    get:
      summary: Dados de diárias
      parameters:
        - name: ano
          in: query
          schema: { type: integer }
      responses:
        '200':
          content:
            application/json: {}
            text/csv: {}
```

### 2.2 Formatos de Exportação

Todos os endpoints devem suportar:

| Formato | Content-Type | Extensão |
|---|---|---|
| JSON | `application/json` | `.json` |
| CSV | `text/csv` | `.csv` |
| XLSX | `application/vnd.openxmlformats-officedocument.spreadsheetml.sheet` | `.xlsx` |
| ODS | `application/vnd.oasis.opendocument.spreadsheet` | `.ods` |
| PDF (pesquisável) | `application/pdf` | `.pdf` |

## 3. Componentes de UI

### 3.1 Tabela de Dados Padrão

```html
<!-- Componente reutilizável para todas as tabelas -->
<div class="data-table-container" data-criterio="3.1">
  <div class="table-header">
    <h2>Receita Prevista e Realizada</h2>
    <div class="table-meta">
      <span class="atualizado-em">Atualizado em: 15/01/2026</span>
      <div class="export-buttons">
        <button data-format="xlsx">XLSX</button>
        <button data-format="csv">CSV</button>
        <button data-format="pdf">PDF</button>
      </div>
    </div>
  </div>
  
  <div class="filters">
    <select name="ano">
      <option value="">Todos os anos</option>
      <option value="2025">2025</option>
      <option value="2024">2024</option>
      <option value="2023">2023</option>
    </select>
    <select name="mes">
      <option value="">Todos os meses</option>
      <!-- ... -->
    </select>
    <input type="text" name="busca" placeholder="Buscar...">
  </div>
  
  <table class="data-table">
    <thead>
      <tr>
        <th>Período</th>
        <th>Receita Prevista</th>
        <th>Receita Realizada</th>
        <th>% Realizado</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td>Janeiro/2025</td>
        <td>R$ 10.000.000,00</td>
        <td>R$ 9.500.000,00</td>
        <td>95%</td>
      </tr>
      <!-- ... -->
    </tbody>
  </table>
  
  <div class="declaracao-inexistencia" hidden>
    <p>ℹ️ Não houve ocorrência no período. Atualizado em 15/01/2026.</p>
  </div>
</div>
```

### 3.2 Filtros Padrão por Dimensão

| Dimensão | Filtros Obrigatórios |
|---|---|
| Atos Normativos | Tipo de ato, ano, palavra-chave |
| Receita | Ano, mês/período |
| Despesa | Ano, mês/período |
| Empenhos | Número do empenho, nome/CPF/CNPJ, mês, ano |
| Convênios | Ano |
| Servidores | Nome |
| Remuneração | Nome, mês, ano |
| Diárias | Nome, mês, ano |
| Licitações | Ano, mês, situação, modalidade |
| Contratos | Período |
| Obras | (padrão) |
| SIC Relatório | (padrão) |
| Dívida Ativa | Nome, ano da inscrição |

## 4. Requisitos de Acessibilidade

### 4.1 Implementação Técnica

```html
<!-- Símbolo de acessibilidade -->
<div class="accessibility-tools">
  <button id="btn-contrast" aria-label="Alto contraste">
    <img src="/assets/icons/contrast.svg" alt="">
  </button>
  <button id="btn-font-inc" aria-label="Aumentar texto">A+</button>
  <button id="btn-font-dec" aria-label="Diminuir texto">A-</button>
  <a href="/transparencia/acessibilidade" aria-label="Acessibilidade">
    <img src="/assets/icons/accessibility.svg" alt="Acessibilidade">
  </a>
</div>

<!-- Breadcrumb -->
<nav aria-label="Breadcrumb">
  <ol class="breadcrumb">
    <li><a href="/">Início</a></li>
    <li><a href="/transparencia">Transparência</a></li>
    <li><a href="/transparencia/receita">Receita</a></li>
    <li aria-current="page">Previsão e Realização</li>
  </ol>
</nav>
```

### 4.2 CSS de Alto Contraste

```css
body.high-contrast {
  --bg-color: #000;
  --text-color: #fff;
  --link-color: #ff0;
  --border-color: #fff;
}

body.high-contrast a {
  text-decoration: underline;
}

/* Redimensionamento de texto */
body.font-large { font-size: 120%; }
body.font-xlarge { font-size: 140%; }
```

## 5. Requisitos de Performance

### 5.1 Métricas

| Métrica | Meta |
|---|---|
| Tempo de carregamento (LCP) | < 2,5 segundos |
| First Input Delay (FID) | < 100 ms |
| Cumulative Layout Shift (CLS) | < 0,1 |
| Uptime | > 99,5% |

### 5.2 Otimizações

- **CDN** para assets estáticos
- **Cache** de páginas com dados atualizados diariamente
- **Lazy loading** de tabelas grandes
- **Paginação** de resultados (máx. 100 por página)
- **Compressão** gzip/brotli
- **HTTP/2** ou HTTP/3

## 6. Segurança

### 6.1 Requisitos

- [ ] HTTPS obrigatório (HSTS)
- [ ] Headers de segurança (CSP, X-Frame-Options, etc.)
- [ ] Proteção contra XSS e CSRF
- [ ] Rate limiting na API
- [ ] Log de acessos
- [ ] Backup diário

### 6.2 LGPD

- [ ] Política de Privacidade publicada
- [ ] Encarregado de dados identificado
- [ ] Canal de comunicação com encarregado
- [ ] Cookies apenas essenciais
- [ ] Consentimento para cookies não essenciais

## 7. Monitoramento e Manutenção

### 7.1 Checklist Diário

- [ ] Verificar disponibilidade do portal (uptime)
- [ ] Verificar atualização de dados (data de referência)
- [ ] Verificar links quebrados
- [ ] VerificarFORMANCE de carregamento

### 7.2 Checklist Mensal

- [ ] Revisão de todos os filtros de pesquisa
- [ ] Revisão de exportações de dados
- [ ] Atualização de dados estáticos (organograma, contatos)
- [ ] Revisão de declarações de inexistência
- [ ] Análise de logs de acesso

### 7.3 Checklist Anual

- [ ] Revisão completa de todos os critérios
- [ ] Atualização de legislação
- [ ] Revisão de acessibilidade
- [ ] Testes de usabilidade
- [ ] Relatório de conformidade
