SN Analytics: Folha
Endpoints da WebApiAlcance para a folha de pagamento no contexto do Simples Nacional - os dados de valor_folha e valor_inss por empresa/mês/ano que alimentam o cálculo do fator R (relação entre folha e receita bruta, que define o enquadramento entre os Anexos III e V do Simples Nacional). Cobrem listagem (com filtro opcional por empresas), criação, upsert em lote, atualização e exclusão de folhas mensais.
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/sn-folhaEscopos necessários
sn_folha:read- listagem de folhassn_folha:write- criação, upsert em lote, atualização e exclusão
O escopo é derivado da rota: o prefixo /sn-folha vira o recurso sn_folha (hífen → underscore), e o método HTTP define a ação (read para GET, write para POST/PUT/DELETE).
Endpoints
GET /sn-folha/
Lista as folhas cadastradas, com filtro opcional por empresas. Lista vazia é um estado válido - sempre retorna 200 OK, inclusive com data: [].
Parâmetros
| Parâmetro | Tipo | Local | Obrigatório | Descrição |
|---|---|---|---|---|
empresa_ids | str | query | não | IDs de empresas separados por vírgula, ex.: 1,2,3 |
Quando empresa_ids contém algo que não seja inteiros separados por vírgula, a API responde 422 Unprocessable Entity com detail: "empresa_ids deve ser uma lista de inteiros separados por vírgula (ex.: 1,2,3).".
Request
Sem corpo de requisição.
Response 200 OK
{
"success": true,
"message": "Folhas recuperadas com sucesso",
"data": [
{
"id": 42,
"empresa_id": 1,
"mes": 5,
"ano": 2026,
"valor_folha": "12000.00",
"valor_inss": "3300.00",
"valor_total": "15300.00",
"created_at": "2026-06-01T09:00:00",
"updated_at": "2026-06-01T09:00:00"
}
]
}Escopo: sn_folha:read
POST /sn-folha/
Cria uma nova folha para uma empresa em um dado mês/ano. Se já existir uma folha para a mesma combinação empresa + mês + ano, a API responde 409 Conflict.
Parâmetros
Este endpoint não recebe parâmetros de rota ou query - os dados vão no corpo da requisição (SnFolhaCreate): empresa_id (obrigatório), mes (obrigatório), ano (obrigatório), valor_folha (opcional, default 0) e valor_inss (opcional, default 0).
Request
{
"empresa_id": 1,
"mes": 5,
"ano": 2026,
"valor_folha": "12000.00",
"valor_inss": "3300.00"
}Response 201 Created
{
"success": true,
"message": "Folha criada com sucesso",
"data": {
"id": 42,
"empresa_id": 1,
"mes": 5,
"ano": 2026,
"valor_folha": "12000.00",
"valor_inss": "3300.00",
"valor_total": "15300.00",
"created_at": "2026-06-01T09:00:00",
"updated_at": "2026-06-01T09:00:00"
}
}Escopo: sn_folha:write
PUT /sn-folha/batch
Faz upsert em lote de folhas, cada item identificado pela combinação empresa/mês/ano - cria as que não existem e atualiza as existentes. O corpo é um array de SnFolhaCreate, com no máximo 5000 itens.
Parâmetros
Este endpoint não recebe parâmetros de rota ou query - o corpo da requisição é um array de objetos SnFolhaCreate (List[SnFolhaCreate]).
Request
[
{ "empresa_id": 1, "mes": 5, "ano": 2026, "valor_folha": "12000.00", "valor_inss": "3300.00" },
{ "empresa_id": 2, "mes": 5, "ano": 2026, "valor_folha": "8000.00", "valor_inss": "2200.00" }
]Response 200 OK
{
"success": true,
"message": "Folhas atualizadas com sucesso",
"data": [
{
"id": 42,
"empresa_id": 1,
"mes": 5,
"ano": 2026,
"valor_folha": "12000.00",
"valor_inss": "3300.00",
"valor_total": "15300.00",
"created_at": "2026-06-01T09:00:00",
"updated_at": "2026-06-01T09:05:00"
}
]
}Escopo: sn_folha:write
PUT /sn-folha/{folha_id}
Atualiza uma folha existente. O body é um SnFolhaUpdate com campos parciais - somente o que vier preenchido é alterado. O empresa_id é imutável e não pode ser alterado por este endpoint. Quando não encontrada, retorna 404 Not Found.
Parâmetros
| Parâmetro | Tipo | Local | Obrigatório | Descrição |
|---|---|---|---|---|
folha_id | int | path | sim | ID interno da folha |
O corpo da requisição é um SnFolhaUpdate com os campos mes, ano, valor_folha e/ou valor_inss - todos opcionais.
Request
{
"mes": 6,
"valor_folha": "12500.00"
}Response 200 OK
{
"success": true,
"message": "Folha atualizada com sucesso",
"data": {
"id": 42,
"empresa_id": 1,
"mes": 6,
"ano": 2026,
"valor_folha": "12500.00",
"valor_inss": "3300.00",
"valor_total": "15800.00",
"created_at": "2026-06-01T09:00:00",
"updated_at": "2026-06-01T11:42:00"
}
}Escopo: sn_folha:write
DELETE /sn-folha/{folha_id}
Remove uma folha pelo ID. Quando não encontrada, retorna 404 Not Found.
Parâmetros
| Parâmetro | Tipo | Local | Obrigatório | Descrição |
|---|---|---|---|---|
folha_id | int | path | sim | ID interno da folha |
Request
Sem corpo de requisição.
Response 200 OK
{
"success": true,
"message": "Folha removida com sucesso",
"data": null
}Escopo: sn_folha:write
Schemas
SnFolhaCreate
Payload de criação (POST /sn-folha/) e item do PUT /sn-folha/batch.
| Campo | Tipo | Obrigatório | Observações |
|---|---|---|---|
empresa_id | int | sim | ID da empresa. >= 1. |
mes | int | sim | Mês de competência. 1..12. |
ano | int | sim | Ano de competência. 2000..2100. |
valor_folha | Decimal | não | Valor da folha. Default 0. Até 15 dígitos, 2 casas decimais. |
valor_inss | Decimal | não | Valor do INSS. Default 0. Até 15 dígitos, 2 casas decimais. |
SnFolhaUpdate
Todos os campos são opcionais; apenas os enviados são atualizados. O empresa_id não aparece aqui - é imutável, para bloquear troca de dono via PUT (mass-assignment).
| Campo | Tipo | Observações |
|---|---|---|
mes | int | Novo mês de competência. 1..12. |
ano | int | Novo ano de competência. 2000..2100. |
valor_folha | Decimal | Novo valor da folha. Até 15 díg., 2 decimais. |
valor_inss | Decimal | Novo valor do INSS. Até 15 díg., 2 decimais. |
SnFolhaRead
Leitura - valida a partir do ORM e serializa com os nomes do contrato.
| Campo | Tipo | Notas |
|---|---|---|
id | int | Identificador da folha. |
empresa_id | int | ID da empresa (mapeia id_cliente do banco). |
mes | int | Mês de competência. |
ano | int | Ano de competência. |
valor_folha | Decimal | Valor da folha. |
valor_inss | Decimal | Valor do INSS. |
valor_total | Decimal | Calculado na serialização: valor_folha + valor_inss. Não persiste no banco. |
created_at | datetime | Data/hora de criação (mapeia data_hora_criacao). |
updated_at | datetime | Data/hora de atualização (mapeia data_hora_atualizacao). |
Notas
- Toda resposta segue o envelope
{ success, message, data }(ou{ success: false, message, details }em erro). valor_totalé derivado (valor_folha + valor_inss) apenas na serialização de leitura - não é aceito no corpo de criação/atualização nem é gravado no banco.empresa_id,created_ateupdated_atno JSON mapeiam, respectivamente,id_cliente,data_hora_criacaoedata_hora_atualizacaodo modelo interno.- Armadilha de roteamento FastAPI: a rota literal
PUT /sn-folha/batché declarada antes da rota dinâmicaPUT /sn-folha/{folha_id}, para quebatchnão seja interpretado como umfolha_id. - A criação impede duplicatas: empresa + mês + ano é uma combinação única (
409 Conflictem caso de conflito). Para atualizar várias competências de uma vez sem se preocupar com existência prévia, usePUT /sn-folha/batch.