Balancete Domínio
Endpoints da WebApiAlcance para os balancetes contábeis importados do sistema Domínio. A criação ocorre por upload de PDF (layout Domínio) - o arquivo é parseado, o CNPJ extraído resolve o cliente e o balancete é persistido (cabeçalho + linhas). Os demais endpoints cobrem a listagem do histórico por cliente, a agregação de status de conferência por período e o detalhamento completo de um balancete.
Todos os endpoints exigem autenticação. Veja Autenticação para o fluxo de API Key. O Swagger oficial está em api.contabilidadealcance.com.br/docs.
Base path
/api/v1/balancetes-dominioEscopos necessários
balancetes_dominio:read- listagem, status por período e detalhamentobalancetes_dominio:write- upload de PDF
O escopo é derivado da rota: o prefixo /balancetes-dominio vira o recurso balancetes_dominio (hífen → underscore), e o método HTTP define a ação (read para GET, write para POST).
Endpoints
POST /balancetes-dominio/upload
Recebe o PDF do Balancete Contábil (layout Domínio), extrai o CNPJ para resolver o cliente e persiste o balancete (cabeçalho + linhas). O tamanho é validado antes da leitura do corpo, como defesa contra excesso de memória.
Parâmetros
| Parâmetro | Tipo | Local | Obrigatório | Descrição |
|---|---|---|---|---|
arquivo | UploadFile | form | sim | PDF do Balancete Contábil (layout Domínio). |
Request
Requisição multipart/form-data (não é JSON). Envie um único campo de formulário arquivo com o PDF do Balancete Contábil.
Content-Type: multipart/form-data; boundary=----WebApiAlcance
------WebApiAlcance
Content-Disposition: form-data; name="arquivo"; filename="balancete_janeiro.pdf"
Content-Type: application/pdf
<conteúdo binário do PDF>
------WebApiAlcance--Response 201 Created
{
"success": true,
"message": "Balancete importado com sucesso",
"data": {
"id": 42,
"id_usuario_created": 7,
"id_cliente": 1234,
"periodo_inicio": "2026-01-01",
"periodo_fim": "2026-01-31",
"data_emissao": "2026-02-05",
"razao_social": "ACME SERVICOS LTDA",
"cnpj": "12345678000199",
"nome_arquivo_original": "balancete_janeiro.pdf",
"tamanho_bytes": 84213,
"hash_arquivo": "9f2c...",
"data_hora_criacao": "2026-02-05T10:22:00-03:00",
"linhas": [
{
"id": 1,
"id_balancete": 42,
"codigo_interno": "1",
"classificacao": "1",
"descricao": "ATIVO",
"saldo_anterior": "0.00",
"saldo_anterior_natureza": "D",
"debito": "10000.00",
"credito": "2000.00",
"saldo_atual": "8000.00",
"saldo_atual_natureza": "D",
"nivel": 1,
"ordem": 1
}
]
}
}PDF inválido / não parseável retorna 400 Bad Request (ValueError); arquivo duplicado para o mesmo cliente retorna 409 Conflict (BalanceteDuplicadoError); arquivo acima do limite (IMPORTACAO_MAX_UPLOAD_BYTES) retorna 413 Request Entity Too Large; CNPJ do PDF sem cliente correspondente retorna 422 Unprocessable Entity (ClienteNaoEncontradoError). Escopo: balancetes_dominio:write
GET /balancetes-dominio/
Lista o histórico de balancetes (visão compartilhada do escritório). Aceita filtro opcional por cliente e paginação. Lista vazia é estado válido - retorna 200 OK com data: [] e a mensagem "Nenhum balancete encontrado.".
Parâmetros
| Parâmetro | Tipo | Local | Obrigatório | Descrição |
|---|---|---|---|---|
id_cliente | int | query | não | ID do cliente (customer.id). |
limit | int | query | não | Padrão 50. Faixa 1..500. |
offset | int | query | não | Padrão 0. Mínimo 0. |
Request
Sem corpo de requisição.
Response 200 OK
{
"success": true,
"message": "Balancetes recuperados com sucesso",
"data": [
{
"id": 42,
"id_cliente": 1234,
"periodo_inicio": "2026-01-01",
"periodo_fim": "2026-01-31",
"razao_social": "ACME SERVICOS LTDA",
"cnpj": "12345678000199",
"nome_arquivo_original": "balancete_janeiro.pdf",
"tamanho_bytes": 84213,
"data_hora_criacao": "2026-02-05T10:22:00-03:00"
}
]
}Escopo: balancetes_dominio:read
GET /balancetes-dominio/status
Agrega o status real de conferência de cada cliente (com plano de contas) para o período: movimento, conferência, presença de balancete da Domínio e divergências. Agregação org-wide (visão compartilhada do escritório) que alimenta a página Análise.
Parâmetros
| Parâmetro | Tipo | Local | Obrigatório | Descrição |
|---|---|---|---|---|
periodo_inicio | date | query | sim | Início do período (YYYY-MM-DD). |
periodo_fim | date | query | sim | Fim do período (YYYY-MM-DD). |
id_cliente | int | query | não | Restringe a um cliente (customer.id, > 0). |
Valida periodo_inicio <= periodo_fim; caso contrário retorna 422 com detail: "A data de inicio nao pode ser posterior a data de fim.".
Request
Sem corpo de requisição.
Response 200 OK
{
"success": true,
"message": "Status de balancete recuperado com sucesso",
"data": [
{
"id_cliente": 1234,
"razao_social": "ACME SERVICOS LTDA",
"cpfecnpj": "12345678000199",
"tem_movimento": true,
"tem_dominio": true,
"dominio_data_import": "2026-02-05",
"conferido": true,
"divergencias": 0,
"status": "ok"
}
]
}Escopo: balancetes_dominio:read
GET /balancetes-dominio/{balancete_id}/validacoes
Executa o motor de regras de análise sobre o balancete (linhas + guias fiscais do cliente no período) e retorna o resultado de cada validação. Quando o balancete não é encontrado, retorna 404 Not Found.
Parâmetros
| Parâmetro | Tipo | Local | Obrigatório | Descrição |
|---|---|---|---|---|
balancete_id | int | path | sim | ID interno do balancete |
Request
Sem corpo de requisição.
Response 200 OK
{
"success": true,
"message": "Validações executadas com sucesso",
"data": [
{
"id_regra": 3,
"nome": "ATIVO igual a PASSIVO + PL",
"tipo": "igualdade",
"gravidade": "alta",
"origem": "sistema",
"status": "passou",
"evidencia": "Ativo (8000.00) confere com Passivo + Patrimônio Líquido.",
"ocorrencias": []
}
]
}Escopo: balancetes_dominio:read
GET /balancetes-dominio/{balancete_id}/arquivo
Baixa o PDF original do balancete (application/pdf), servido como anexo com o nome original do arquivo. Quando o balancete não é encontrado, retorna 404 Not Found (ValueError).
Parâmetros
| Parâmetro | Tipo | Local | Obrigatório | Descrição |
|---|---|---|---|---|
balancete_id | int | path | sim | ID interno do balancete |
Request
Sem corpo de requisição.
Response 200 OK
Retorna o binário do PDF (Content-Type: application/pdf), não o envelope JSON. O cabeçalho Content-Disposition traz o nome original do arquivo (nome_arquivo_original).
Escopo: balancetes_dominio:read
GET /balancetes-dominio/{balancete_id}
Detalha um balancete pelo ID inteiro, incluindo as linhas. Quando não encontrado, retorna 404 Not Found (ValueError).
Parâmetros
| Parâmetro | Tipo | Local | Obrigatório | Descrição |
|---|---|---|---|---|
balancete_id | int | path | sim | ID interno do balancete |
Request
Sem corpo de requisição.
Response 200 OK
{
"success": true,
"message": "Balancete recuperado com sucesso",
"data": {
"id": 42,
"id_usuario_created": 7,
"id_cliente": 1234,
"periodo_inicio": "2026-01-01",
"periodo_fim": "2026-01-31",
"data_emissao": "2026-02-05",
"razao_social": "ACME SERVICOS LTDA",
"cnpj": "12345678000199",
"nome_arquivo_original": "balancete_janeiro.pdf",
"tamanho_bytes": 84213,
"hash_arquivo": "9f2c...",
"data_hora_criacao": "2026-02-05T10:22:00-03:00",
"linhas": [
{
"id": 1,
"id_balancete": 42,
"codigo_interno": "1",
"classificacao": "1",
"descricao": "ATIVO",
"saldo_anterior": "0.00",
"saldo_anterior_natureza": "D",
"debito": "10000.00",
"credito": "2000.00",
"saldo_atual": "8000.00",
"saldo_atual_natureza": "D",
"nivel": 1,
"ordem": 1
}
]
}
}Escopo: balancetes_dominio:read
Schemas
BalanceteDominioRead
Cabeçalho do balancete (item de lista; sem as linhas). Somente leitura.
| Campo | Tipo | Notas |
|---|---|---|
id | int | Identificador do balancete. |
id_usuario_created | int | Usuário que fez o upload. |
id_cliente | int | Cliente resolvido pelo CNPJ (customer.id). |
periodo_inicio | date | Início do período do balancete. |
periodo_fim | date | Fim do período do balancete. |
data_emissao | date? | Data de emissão do PDF (opcional). |
razao_social | str? | Razão social extraída do PDF (opcional). |
cnpj | str? | CNPJ extraído do PDF (opcional). |
nome_arquivo_original | str | Nome original do arquivo enviado. |
tamanho_bytes | int | Tamanho do arquivo em bytes. |
hash_arquivo | str? | Hash do arquivo (deduplicação; opcional). |
data_hora_criacao | datetime | Data/hora do upload, normalizada para America/Sao_Paulo. |
BalanceteDominioLinhaRead
Linha (conta) do balancete. Os valores Numeric(15,2) são expostos como Decimal e serializados como string em JSON, preservando a precisão contábil.
| Campo | Tipo | Notas |
|---|---|---|
id | int | Identificador da linha. |
id_balancete | int | Balancete ao qual a linha pertence. |
codigo_interno | str? | Código interno da conta (opcional). |
classificacao | str | Classificação contábil (ex.: 1.1.01). |
descricao | str | Descrição da conta. |
saldo_anterior | Decimal | Saldo anterior (string em JSON). |
saldo_anterior_natureza | str? | Natureza do saldo anterior (D/C). |
debito | Decimal | Total de débitos (string em JSON). |
credito | Decimal | Total de créditos (string em JSON). |
saldo_atual | Decimal | Saldo atual (string em JSON). |
saldo_atual_natureza | str? | Natureza do saldo atual (D/C). |
nivel | int | Nível hierárquico da conta. |
ordem | int | Ordem de exibição. |
BalanceteDominioDetail
Detalhe completo: estende BalanceteDominioRead com o array de linhas.
| Campo | Tipo | Notas |
|---|---|---|
(herda todos os campos de BalanceteDominioRead) | ||
linhas | List[BalanceteDominioLinhaRead] | Linhas do balancete (default []). |
BalanceteStatusClienteRead
Status de conferência de balancete de um cliente para um período. Item da resposta de GET /balancetes-dominio/status (um item por cliente que possui plano de contas).
| Campo | Tipo | Notas |
|---|---|---|
id_cliente | int | Cliente (customer.id). |
razao_social | str | Razão social do cliente. |
cpfecnpj | str? | CPF/CNPJ do cliente (opcional). |
tem_movimento | bool | Há lançamento no período. |
tem_dominio | bool | Há balancete importado da Domínio. |
dominio_data_import | date? | Data de importação do balancete da Domínio (opcional). |
conferido | bool | Movimento conferido. |
divergencias | int? | Quantidade de divergências (opcional). |
status | str | Estado derivado (ver tabela abaixo). |
Valores possíveis de status (derivados no service):
| Valor | Significado |
|---|---|
sem_movimento | Não há lançamento no período. |
pendente | Tem movimento mas não está conferido (lançamento órfão: plano/contas inválidos). |
ok | Tem movimento, conferido, há balancete da Domínio e divergencias == 0. |
andamento | Tem movimento, conferido, mas sem balancete da Domínio ou com divergencias > 0. |
Notas
- Toda resposta segue o envelope
{ success, message, data }(ou{ success: false, message, details }em erro). - Não há endpoints
Create/Updateem JSON: a criação acontece exclusivamente viaPOST /balancetes-dominio/upload(multipart). Os schemas são somente leitura. GET /balancetes-dominio/statusé declarado antes da rota dinâmicaGET /balancetes-dominio/{balancete_id}, entãostatusé resolvido como rota estática (e não interpretado como umbalancete_id).- Os valores monetários (
Decimal,Numeric(15,2)) são serializados como string no JSON para preservar a precisão contábil. - O campo interno
nome_arquivo_armazenado(caminho em disco) é omitido de propósito das respostas.