# Homologacao e Testes Possiveis

Data: 08/07/2026

## Resultado da checagem na documentacao

A documentacao oficial possui ambiente de producao restrita, usado como homologacao/testes:

- Documentacao tecnica de homologacao/testes: https://www.gov.br/nfse/pt-br/biblioteca/documentacao-tecnica/producao-restrita
- APIs de producao restrita e producao: https://www.gov.br/nfse/pt-br/biblioteca/documentacao-tecnica/apis-prod-restrita-e-producao

Endpoints de producao restrita relevantes:

- ADN municipios: https://adn.producaorestrita.nfse.gov.br/municipios/docs/index.html
- ADN contribuintes: https://adn.producaorestrita.nfse.gov.br/contribuintes/docs/index.html
- ADN geral: https://adn.producaorestrita.nfse.gov.br/docs/index.html
- Parametrizacao: https://adn.producaorestrita.nfse.gov.br/parametrizacao/docs/index.html
- DANFSe: https://adn.producaorestrita.nfse.gov.br/danfse/docs/index.html
- SEFIN Nacional: https://sefin.producaorestrita.nfse.gov.br/API/SefinNacional/docs/index

Nao foi encontrado certificado publico, token de teste, usuario padrao ou massa aberta na pagina oficial.

## Teste pratico sem certificado

Foi feita chamada HTTP sem certificado cliente:

```sh
curl -I --max-time 20 https://adn.producaorestrita.nfse.gov.br/municipios/docs/index.html
curl -I --max-time 20 https://adn.producaorestrita.nfse.gov.br/contribuintes/docs/index.html
```

Resultado observado:

```text
HTTP/2 496
```

Esse status indica que o servidor espera certificado cliente na conexao TLS. Portanto, a producao restrita nao se comporta como sandbox publico aberto.

## Teste pratico com certificado mock

Foi gerado um certificado A1 `.pfx` autoassinado apenas para testar o fluxo local:

```sh
./scripts/gerar_certificado_mock.sh 3550308 mock123
PFX_PASSWORD='mock123' ./scripts/test_certificado_homolog.sh certificados/municipios/3550308/certificado.pfx
```

O PFX foi aberto corretamente, mas a API retornou:

```text
HTTP status: 495
495 SSL Certificate Error
An invalid certificate has been provided.
```

Isso confirma que o fluxo de chamada com certificado cliente foi executado, mas o ambiente oficial rejeita certificados nao confiaveis/nao autorizados.

## O que da para testar agora

Sem certificado real:

- conectividade ate os hosts de producao restrita;
- confirmacao de exigencia de certificado cliente;
- criacao e leitura de um certificado A1 `.pfx` mock;
- fluxo local de extrair certificado/chave com `openssl`;
- estrutura de banco MySQL local;
- migrations e seeds;
- processamento paralelo por municipio em modo simulado;
- parsing futuro de XMLs mock;
- validacao futura contra XSD de producao restrita, quando os XSDs estiverem baixados no projeto.

Com certificado real/autorizado:

- autenticacao mTLS contra producao restrita;
- chamada a Swagger/endpoints protegidos;
- consulta de DF-e por NSU;
- consulta pontual por chave/NSU;
- teste de autorizacao por perfil de municipio ou contribuinte.

Com certificado real/autorizado em producao:

- autenticacao mTLS contra `https://adn.nfse.gov.br/municipios`;
- consulta real de DF-e por NSU;
- retorno de `ArquivoXml` compactado em GZip/base64;
- persistencia futura nas tabelas fisicas do municipio.

## Scripts criados

- `scripts/smoke_endpoints_sem_cert.sh`: testa endpoints sem certificado e registra HTTP status.
- `scripts/gerar_certificado_mock.sh`: gera `.pfx` local autoassinado para testar leitura do arquivo.
- `scripts/test_certificado_homolog.sh`: valida `.pfx` e tenta chamada HTTPS com certificado cliente.
- `scripts/check_db_mock.sh`: confere as tabelas e dados mock no MySQL local.
- `scripts/simular_workers.py`: simula processamento concorrente por municipio.
- `docs/resultados-testes-locais.md`: evidencias dos testes executados.

## Proximo passo quando houver certificado real

Colocar o `.pfx` fora do Git, por exemplo:

```text
certificados/municipios/3550308/certificado.pfx
```

Cadastrar no banco o caminho do arquivo e a senha criptografada. A chave mestra para abrir a senha deve ficar fora do banco.

Rodar:

```sh
PFX_PASSWORD='senha-real' ./scripts/test_certificado_homolog.sh certificados/municipios/3550308/certificado.pfx
```

Se a conexao autenticar, o proximo passo e implementar o cliente real da API de distribuicao por NSU.
