Certidão Negativa

Gestão de Certidões Negativas de Débito (CND) emitidas pela Alcance Contabilidade para seus clientes - abrangendo Receita Federal, FGTS, SEFAZ Salvador e SEFAZ Bahia. Os endpoints cobrem registro de emissões, consulta com filtros, analytics, monitoramento por categoria de pendência, download do PDF e envio por e-mail/WhatsApp.

Base path

/api/v1/certidao-negativa

Todos os endpoints exigem header Authorization: Bearer <API_KEY> e a API Key emitida pela WebApiAlcance precisa carregar os escopos abaixo.

Escopos necessários

EscopoEndpoints cobertos
certidao_negativa:readGET /, GET /{id}, GET /{id}/pdf, GET /stats, GET /monitoring, GET /monitoring/list
certidao_negativa:writePOST /, PUT /{id}, DELETE /{id}, POST /{id}/enviar-email/{email}, POST /{id}/enviar-whatsapp/{numero}

Endpoints

POST /certidao-negativa/

Registra uma nova certidão. Aceita pdf_base64 opcional no payload - campo grande, mas necessário se você quiser baixar o PDF depois via /{id}/pdf.

Parâmetros

Este endpoint não recebe parâmetros de rota ou query - os dados vão no corpo da requisição (CertidaoNegativaCreate): id_usuario, id_cliente, tipo e status são obrigatórios; observacao, data_validade, pdf_base64, negativa e motivo são opcionais.

Request

{
  "id_usuario": 12,
  "id_cliente": 487,
  "tipo": "RECEITA FEDERAL",
  "status": "Concluido",
  "observacao": "Emissão automática via rotina diária",
  "data_validade": "2026-08-14T00:00:00",
  "pdf_base64": "JVBERi0xLjcKJeLjz9MK...",
  "negativa": true,
  "motivo": null
}

Response 200 OK

{
  "success": true,
  "message": "Certidão registrada com sucesso!",
  "data": {
    "id": 9821,
    "id_usuario": 12,
    "id_cliente": 487,
    "tipo": "RECEITA FEDERAL",
    "status": "Concluido",
    "observacao": "Emissão automática via rotina diária",
    "data_hora_emissao": "2026-05-15T08:14:22",
    "data_validade": "2026-08-14T00:00:00",
    "negativa": true,
    "motivo": null
  }
}

Escopo: certidao_negativa:write

GET /certidao-negativa/stats

Retorna estatísticas consolidadas (totais por tipo, status, taxa de sucesso, médias de validade). Útil para dashboards executivos.

Parâmetros

Este endpoint não recebe parâmetros de rota ou query.

Request

Sem corpo de requisição.

Response 200 OK

{
  "success": true,
  "message": "Estatísticas geradas com sucesso!",
  "data": {
    "total": 1284,
    "por_tipo": {
      "RECEITA FEDERAL": 412,
      "FGTS": 388,
      "SEFAZ BAHIA": 301,
      "SEFAZ SALVADOR": 183
    },
    "por_status": {
      "Concluido": 1190,
      "Falha": 94
    },
    "taxa_sucesso": 0.9268
  }
}

Escopo: certidao_negativa:read

GET /certidao-negativa/monitoring

Retorna contadores agregados das categorias de monitoramento (sem listar registros). Pareie com /monitoring/list quando precisar dos itens.

Parâmetros

Este endpoint não recebe parâmetros de rota ou query.

Request

Sem corpo de requisição.

Response 200 OK

{
  "success": true,
  "message": "Dados de monitoramento gerados com sucesso!",
  "data": {
    "sem_certidao": 37,
    "com_pendencia": 21,
    "exigibilidade_suspensa": 8,
    "total_sucesso": 1190,
    "total_vencidas": 64,
    "total_falhas": 94
  }
}

Escopo: certidao_negativa:read

GET /certidao-negativa/monitoring/list

Retorna listas (não contadores) do monitoramento, segmentadas por categoria. Categoria inválida retorna 400 Bad Request.

Parâmetros

ParâmetroTipoLocalObrigatórioDescrição
tipostrquerynãoFiltra por tipo (ex.: SEFAZ BAHIA, FGTS, RECEITA FEDERAL).
categoriastrquerynãoUma de: sem_certidao, com_pendencia, exigibilidade_suspensa, total_sucesso, total_vencidas, total_falhas.
limitintquerynão1-10000. Se omitido, retorna tudo (cuidado com volume).
offsetintquerynãoDefault 0.

Exemplo: GET /certidao-negativa/monitoring/list?tipo=SEFAZ BAHIA&categoria=com_pendencia&limit=50.

Request

Sem corpo de requisição.

Response 200 OK

{
  "success": true,
  "message": "Listas de monitoramento geradas com sucesso!",
  "data": {
    "com_pendencia": [
      {
        "id": 9754,
        "id_cliente": 512,
        "tipo": "SEFAZ BAHIA",
        "status": "Concluido",
        "negativa": false,
        "motivo": "Débitos de ICMS em aberto",
        "data_hora_emissao": "2026-05-10T07:02:11",
        "data_validade": "2026-08-08T00:00:00"
      }
    ]
  }
}

Escopo: certidao_negativa:read

GET /certidao-negativa/{certidao_id}

Retorna CertidaoNegativaRead com pdf_base64 incluído. Use quando precisar do conteúdo binário em base64 (ex.: anexar a um e-mail externo). Quando não encontrada, retorna 404 Not Found.

Parâmetros

ParâmetroTipoLocalObrigatórioDescrição
certidao_idintpathsimID interno da certidão

Request

Sem corpo de requisição.

Response 200 OK

{
  "success": true,
  "message": "Certidão encontrada com sucesso!",
  "data": {
    "id": 9821,
    "id_usuario": 12,
    "id_cliente": 487,
    "tipo": "RECEITA FEDERAL",
    "status": "Concluido",
    "observacao": null,
    "data_hora_emissao": "2026-05-15T08:14:22",
    "data_validade": "2026-08-14T00:00:00",
    "pdf_base64": "JVBERi0xLjcK...",
    "negativa": true,
    "motivo": null
  }
}

Escopo: certidao_negativa:read

GET /certidao-negativa/

Lista paginada sem pdf_base64 (ver schema CertidaoNegativaListItem abaixo). Lista vazia é estado válido - retorna 200 OK com data: [].

Parâmetros

ParâmetroTipoLocalObrigatórioDescrição
customer_idintquerynãoFiltra por id_cliente.
tipostrquerynãoCase-insensitive. Ex.: FGTS, RECEITA FEDERAL.
statusstrquerynãoCase-insensitive. Ex.: Concluido, Falha.
start_datedatetimequerynãodata_hora_emissao >= start_date.
end_datedatetimequerynãodata_hora_emissao <= end_date.
limitintquerynão1-500. Se omitido, retorna todos que casarem.
offsetintquerynãoDefault 0.

Exemplo: GET /certidao-negativa/?customer_id=487&tipo=FGTS&status=Concluido&start_date=2026-01-01&limit=50.

Request

Sem corpo de requisição.

Response 200 OK

{
  "success": true,
  "message": "Certidões encontradas com sucesso!",
  "data": [
    {
      "id": 9821,
      "id_usuario": 12,
      "id_cliente": 487,
      "tipo": "RECEITA FEDERAL",
      "status": "Concluido",
      "observacao": null,
      "data_hora_emissao": "2026-05-15T08:14:22",
      "data_validade": "2026-08-14T00:00:00",
      "negativa": true,
      "motivo": null
    }
  ]
}

Escopo: certidao_negativa:read

PUT /certidao-negativa/{certidao_id}

Atualiza campos mutáveis de uma certidão. O body é um CertidaoNegativaUpdate com campos parciais - somente observacao, status, pdf_base64 e motivo podem ser alterados.

Parâmetros

ParâmetroTipoLocalObrigatórioDescrição
certidao_idintpathsimID da certidão

Request (CertidaoNegativaUpdate - todos os campos opcionais)

{
  "observacao": "Reemitida após indisponibilidade do Portal Receita",
  "status": "Concluido",
  "pdf_base64": "JVBERi0xLjcK...",
  "motivo": null
}

Response 200 OK

{
  "success": true,
  "message": "Certidão atualizada com sucesso!",
  "data": {
    "id": 9821,
    "id_usuario": 12,
    "id_cliente": 487,
    "tipo": "RECEITA FEDERAL",
    "status": "Concluido",
    "observacao": "Reemitida após indisponibilidade do Portal Receita",
    "data_hora_emissao": "2026-05-15T08:14:22",
    "data_validade": "2026-08-14T00:00:00",
    "negativa": true,
    "motivo": null
  }
}

Escopo: certidao_negativa:write

DELETE /certidao-negativa/{certidao_id}

Remove fisicamente o registro. Não exposto via MCP (operação destrutiva irreversível) - uso direto da API apenas.

Parâmetros

ParâmetroTipoLocalObrigatórioDescrição
certidao_idintpathsimID da certidão

Request

Sem corpo de requisição.

Response 200 OK

{
  "success": true,
  "message": "Certidão deletada com sucesso!",
  "data": true
}

Escopo: certidao_negativa:write

GET /certidao-negativa/{certidao_id}/pdf

Retorna application/pdf com header Content-Disposition: inline; filename=certidao_<id>.pdf. Forma recomendada para abrir o PDF no navegador ou anexar em pipelines. Quando a certidão não tem PDF, retorna erro no envelope padrão.

Parâmetros

ParâmetroTipoLocalObrigatórioDescrição
certidao_idintpathsimID da certidão

Request

Sem corpo de requisição.

Response 200 OK

Content-Type: application/pdf
Content-Disposition: inline; filename=certidao_9821.pdf
 
<conteúdo binário do PDF>

Escopo: certidao_negativa:read

POST /certidao-negativa/{certidao_id}/enviar-email/{email}

Envia o PDF da certidão como anexo via SMTP corporativo da Alcance. Se email for omitido, usa o e-mail cadastrado no cliente (customer.email).

Parâmetros

ParâmetroTipoLocalObrigatórioDescrição
certidao_idintpathsimID da certidão
emailstrpathnãoE-mail de destino. Se omitido, usa o do cliente.

Request

Sem corpo de requisição.

Response 200 OK

{
  "mensagem": "Certidão enviada com sucesso por e-mail.",
  "email_destino": "financeiro@empresa.com.br"
}

Escopo: certidao_negativa:write

POST /certidao-negativa/{certidao_id}/enviar-whatsapp/{numero}

Envia o PDF via ZapContabil. Se numero for omitido, usa o celular do cliente.

Parâmetros

ParâmetroTipoLocalObrigatórioDescrição
certidao_idintpathsimID da certidão
numerostrpathnãoNúmero de destino. Se omitido, usa o celular do cliente.

Request

Sem corpo de requisição.

Response 200 OK

{
  "mensagem": "Certidão enviada com sucesso via WhatsApp.",
  "status": 200,
  "whatsapp_response": {
    "id": "msg_9f2c1a",
    "status": "sent"
  }
}

Escopo: certidao_negativa:write

Schemas

CertidaoNegativaListItem

Schema enxuto retornado em GET /certidao-negativa/. NÃO inclui pdf_base64 (campo Text enorme - excluído para evitar payloads gigantes).

CampoTipoDescrição
idintIdentificador único da certidão.
id_usuariointUsuário Alcance que registrou a emissão.
id_clienteintCliente vinculado (FK customers.id).
tipostringRECEITA FEDERAL, FGTS, SEFAZ BAHIA, SEFAZ SALVADOR.
statusstringConcluido, Falha, Em andamento.
observacaostring?Observação livre.
data_hora_emissaodatetimeQuando o registro foi criado/emitido.
data_validadedatetime?Validade da certidão (geralmente 90 ou 180 dias).
negativabool?true = sem pendências; false = com pendências.
motivostring?Motivo da pendência / falha, quando aplicável.

Categorias do monitoramento

Valores aceitos pelo query param categoria em /monitoring/list (e chaves retornadas em /monitoring):

CategoriaSignificado
sem_certidaoClientes que ainda não possuem certidão emitida no período.
com_pendenciaCertidões emitidas com pendências (negativa = false).
exigibilidade_suspensaPendências cuja exigibilidade está suspensa (parcelamento, liminar).
total_sucessoEmissões bem-sucedidas no período.
total_vencidasCertidões cujo data_validade já passou.
total_falhasTentativas de emissão que falharam (timeouts, instabilidade do portal).

Notas

PDF nunca volta na listagem

A listagem GET /certidao-negativa/ não retorna pdf_base64 por padrão - o campo é enorme e estourava payloads em consultas com muitos itens. Para obter o PDF de uma certidão específica, use GET /certidao-negativa/{id} (devolve pdf_base64 no JSON) ou GET /certidao-negativa/{id}/pdf (binário com Content-Disposition). A versão binária é preferida para download e visualização inline no navegador.

Filtros case-insensitive

tipo e status em GET / são case-insensitive - fgts, FGTS e Fgts retornam o mesmo conjunto.