Lançamento Sem Movimento
Marcação "a competência deste cliente não teve movimento" - uma afirmação de uma pessoa, usada como triagem da planilha de competência (Reinf > Lucro). Não é ato fiscal: não gera R-4099 nem altera o estado do período no REINF.
As duas rotas são idempotentes: marcar de novo devolve a marcação existente, e desmarcar o que não existe responde 200 mesmo assim. Dois operadores conferindo a mesma lista é o caso normal, não um erro. Veja Autenticação.
Base path
Todos os endpoints abaixo são montados sob o prefixo:
/api/v1/lancamento-sem-movimentoA URL completa em produção é https://api.contabilidadealcance.com.br/api/v1/lancamento-sem-movimento.
Escopos necessários
| Escopo | Operações |
|---|---|
lancamento_sem_movimento:write | POST /, DELETE / |
O escopo é derivado da rota: o prefixo /lancamento-sem-movimento vira o recurso lancamento_sem_movimento (hífen → underscore) e POST/DELETE viram write. Não há rota de leitura neste router.
Endpoints
POST /lancamento-sem-movimento/
Marca a competência de um cliente como sem movimento e registra quem marcou (usuário autenticado). Se a marcação já existe, devolve a existente (200) e preserva a autoria da primeira marcação - inclusive se ela foi feita pelo cliente no Portal.
Parâmetros
Sem parâmetros de rota ou query. Corpo SemMovimentoCreate:
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
id_cliente | int | sim | Cliente (> 0). |
competencia | str | sim | MM/YYYY com dígitos ASCII, mês de 01 a 12 e ano entre 2000 e 2100. |
Competência fora do formato ou da faixa retorna 422.
Request
{
"id_cliente": 42,
"competencia": "09/2026"
}Response 200 OK
{
"status": "success",
"message": "Competencia marcada como sem movimento.",
"data": {
"id": 315,
"id_cliente": 42,
"competencia": "09/2026",
"id_usuario_criacao": 7,
"id_portal_user_criacao": null,
"data_hora_criacao": "2026-10-14T16:20:05"
}
}Escopo: lancamento_sem_movimento:write
DELETE /lancamento-sem-movimento/
Desfaz a marcação do par cliente + competência. Sem marcação para desfazer, responde 200 com removida: false.
Parâmetros
| Parâmetro | Tipo | Local | Obrigatório | Descrição |
|---|---|---|---|---|
id_cliente | int | query | sim | Cliente (> 0). |
competencia | str | query | sim | Competência MM/YYYY. |
Request
DELETE /api/v1/lancamento-sem-movimento/?id_cliente=42&competencia=09/2026Response 200 OK
{
"status": "success",
"message": "Marcacao desfeita.",
"data": { "removida": true }
}Quando não havia marcação, a mensagem é "Nao havia marcacao para desfazer." e data.removida é false. Escopo: lancamento_sem_movimento:write
Schemas
SemMovimentoRead
| Campo | Tipo | Descrição |
|---|---|---|
id | int | Id da marcação. |
id_cliente | int | Cliente. |
competencia | str | MM/YYYY. |
id_usuario_criacao | int | null | Autor, quando marcado pelo escritório (rota interna). |
id_portal_user_criacao | int | null | Autor, quando marcado pelo cliente no Portal. |
data_hora_criacao | datetime | null | Momento da marcação. |
Exatamente um dos dois campos de autoria é preenchido por marcação.
Notas
- Rota interna sem trava de período: o guard de competência REINF aberta (
guard_competencia_reinf_aberta) é usado hoje só pelo Portal do Cliente; estas rotas internas não aplicam essa trava, de propósito - o contador é a autoridade que pode reabrir o período. - Validação do DELETE: no
DELETE,competenciachega como texto livre na query (sem o validador de formato doPOST); um valor que não casa com nenhuma marcação simplesmente retornaremovida: false. - Precedência no mapa de competência: a marcação é o que a tabela afirma. O cruzamento com os lançamentos (lançamento observado vence a afirmação "sem movimento") acontece no mapa de competência de Lançamento Lucro.