Documentação · v0.2
Orquestrador Mobility ⟷ Omie
Referência completa das rotas que substituem o WOOFFICE, das regras de negócio aplicadas em cada uma e da configuração do ambiente.
Visão geral
URL base
https://mobility.iaxys.com.br
Autenticação
X-Api-Key: <chave>
Formato
JSON UTF-8, datas ISO 8601, valores em reais com ponto decimal.
A Mobility envia cada reserva confirmada para o orquestrador. O orquestrador valida, grava o detalhe operacional que a Omie não comporta e cria na Omie o cliente, a Ordem de Serviço e os títulos a receber e a pagar.
Depois, a Omie avisa o orquestrador por webhook sobre baixas, faturamento e alterações. O orquestrador repassa esses eventos para a Mobility com assinatura HMAC, ou os deixa disponíveis para consulta.
curl -X POST https://mobility.iaxys.com.br/api/mobility/v1/vendas \ -H "X-Api-Key: $MOBILITY_API_KEY" \ -H "Content-Type: application/json" \ -d @venda.json
Rotas
Cada rota lista parâmetros, respostas possíveis e as regras de negócio que a compõem.
Vendas
/api/mobility/v1/vendasX-Api-KeyImportar venda
Recebe uma reserva confirmada e a transforma em cliente, OS e títulos financeiros na Omie.
Substitui: ImportacaoDeVenda.svc → ImportarVenda (ExportarVendasMobilToWooffice)
Recebe o payload de uma reserva (o antigo XML ImportacaoVenda, agora em JSON camelCase). A Mobility envia um payload por reserva, e várias reservas podem compartilhar o mesmo File.
A resposta é imediata (202) e o processamento na Omie acontece em segundo plano. O resultado fica disponível na consulta de status e é enviado no callback para a Mobility.
Dados de cartão e documentos de condutores são mascarados antes de qualquer gravação.
Contrato ampliado no alinhamento de 09/10/2026: os três agentes (criação, emissão e solicitante) com CNPJ e emissor interno, idVenda e idReserva, confirmação (quem e quando), horas de retirada e entrega, país de origem e destino, descrição do rate code, garantia de no-show, franquia, valor do km, observação da reserva, percentual de markup, taxa de serviço estrangeira e câmbio do dólar, pessoa e comissão repassada no recebimento, tarifa/taxa/total no pagamento e o bloco totalReceber.
Campo que não está no contrato nunca derruba a importação: todo objeto é passthrough, o extra fica guardado no payload e pode ser usado depois.
O bloco clienteDados cria o cliente na Omie quando ele ainda não existe: razaoSocial e cnpjCpf são obrigatórios, e endereço, telefone, e-mail, inscrição estadual e contato alimentam o cadastro usado na nota e na cobrança. Sem o bloco, e sem o cliente cadastrado, a venda para com erro de cadastro.
Quando totalReceber.total vem preenchido, o orquestrador confere contra a soma dos recebimentos e registra divergência acima de R$ 0,02 no log, sem bloquear a venda.
Corpo
Objeto VendaImportacao. Use as amostras reais do painel de testes como referência.
Respostas
- 202Aceita. Devolve protocolo, chave da reserva e as outras reservas já recebidas no mesmo File.
- 400Corpo não é JSON válido.
- 401X-Api-Key ausente ou inválida.
- 409Esta reserva já foi importada e não está em ERRO. Devolve o estado atual.
- 422Falha de validação do contrato. O campo detalhes lista cada problema.
- 503MOBILITY_API_KEY não configurada no servidor.
Regras de negócio aplicadas
Exemplo de resposta
{
"protocolo": "MOB-20260911-00341130-A1B2C3",
"file": "00341130",
"chave": "29-26-00341130-341131",
"localizadores": [
"FOPB8XW"
],
"status": "RECEBIDO",
"outrasReservasDoFile": [
{
"chave": "29-26-00341130-341130",
"status": "INTEGRADO"
}
],
"persistencia": "postgres",
"consulta": "/api/mobility/v1/vendas/00341130?empresa=29&filial=26"
}/api/mobility/v1/vendas/{file}X-Api-KeyStatus do File
Estado consolidado do File, com cada reserva, a OS e os títulos criados na Omie.
Devolve o status de todas as reservas exportadas com aquele File. O status consolidado é INTEGRADO só quando todas as reservas estão integradas.
Empresa e filial são opcionais, mas recomendadas quando o mesmo número de File pode existir em mais de uma filial.
Parâmetros
| file | path · obrigatório | Número do File na Mobility. | 00341130 |
| empresa | query | Id da empresa no WOOFFICE. | 29 |
| filial | query | Id da filial no WOOFFICE. | 26 |
Respostas
- 200Status consolidado e lista de reservas.
- 404Nenhuma reserva recebida com esse File.
Regras de negócio aplicadas
Exemplo de resposta
{
"file": "00341130",
"status": "INTEGRADO",
"quantidadeReservas": 2,
"reservas": [
{
"chave": "29-26-00341130-341130",
"localizadores": [
"FOJOKLB"
],
"status": "INTEGRADO",
"osOmie": {
"nCodOS": 987654,
"cCodIntOS": "MOB-29-26-00341130-341130",
"cNumOS": "000123"
},
"titulosReceber": [
{
"codigoIntegracao": "MOB-00341130-CRE-341130-R1-P1",
"valor": 117.39,
"vencimento": "20/09/2026",
"parcela": "1/1"
}
],
"titulosPagar": [
{
"codigoIntegracao": "MOB-00341130-CPA-341130-1",
"valor": 0.11,
"tipo": "COMISSAO"
}
],
"erros": []
}
]
}/api/mobility/v1/vendas/{file}/creditoX-Api-KeyConsultar crédito do File
Itens financeiros do File (CRE e CPA), situação na Omie e rentabilidade.
Substitui: ConsultaVendas.svc → BuscarDadosDaVenda (ConsultarCrédito)
Cada item mantém o subProduto do retorno antigo: CARRO ou PACOTE no recebimento (conforme ehPacote), e COMISSAO, REEMBOLSO ou PAGAMENTO no pagamento.
Mesma semântica do TurVendaDadosModelo do WOOFFICE. Lista os títulos a receber (CRE) e a pagar (CPA) de todas as reservas do File.
Por padrão consulta cada título ao vivo na Omie para saber se já foi baixado. Use omie=0 para responder só com os dados do orquestrador.
Parâmetros
| file | path · obrigatório | Número do File. | 00341130 |
| empresa | query | Id da empresa. | 29 |
| filial | query | Id da filial. | 26 |
| omie | query | 0 para não consultar a Omie ao vivo. | 1 |
Respostas
- 200Itens, totais e rentabilidade. Falhas pontuais na Omie aparecem em avisos.
- 404File não encontrado.
Regras de negócio aplicadas
Exemplo de resposta
{
"file": "00341130",
"situacao": "VendaImportada",
"formaDePagamento": "FATURADO",
"formaDeRecebimento": "CC",
"valorTotalCre": 352.17,
"valorTotalCpa": 0.11,
"valorRentabilidade": 352.06,
"percentualRentabilidade": 99.97,
"itens": [
{
"tipo": "CRE",
"subProduto": "CARRO",
"situacao": "Previsto",
"localizador": "FOJOKLB",
"total": 117.39
}
]
}/api/mobility/v1/vendas/por-id/{idVenda}/creditoX-Api-KeyConsultar crédito pelo id da venda
Mesmo retorno da consulta por File, para quem identifica a venda pelo id da plataforma.
Substitui: ConsultarCrédito, quando a chamada parte do id da venda
Criada no alinhamento de 09/10/2026: a plataforma da Mobility valida o crédito pelo id da venda, enquanto a integração usa o File como chave de negócio. As duas formas passam a existir.
Depende de a importação ter trazido o campo idVenda. Sem ele, a resposta é 404 com a dica do campo que falta.
A busca varre as 1000 vendas mais recentes; para volume maior vale indexar o campo no banco.
Parâmetros
| idVenda | path · obrigatório | Id da venda na plataforma da Mobility. | 987654 |
Respostas
- 200Mesmo corpo da consulta por File, com o campo idVenda no cabeçalho.
- 404Nenhuma venda importada com este id.
Regras de negócio aplicadas
/api/mobility/v1/vendas/{file}/reprocessarX-Api-KeyReprocessar File
Roda de novo, na hora, as reservas do File que não estão integradas.
Útil depois de corrigir um cadastro na Omie (cliente, categoria, serviço) ou quando a venda ficou em ERRO.
O processamento retoma de onde parou: o que já foi criado na Omie não é duplicado.
Parâmetros
| file | path · obrigatório | Número do File. | 00341130 |
| empresa | query | Id da empresa. | 29 |
| filial | query | Id da filial. | 26 |
Respostas
- 200Lista das reservas reprocessadas e o novo status consolidado.
- 404File não encontrado.
Regras de negócio aplicadas
/api/mobility/v1/vendasX-Api-KeyResumo por status
Quantidade de reservas em cada status, para monitoramento.
Contagem por status de todas as reservas recebidas pelo orquestrador.
Respostas
- 200Objeto porStatus e o modo de persistência.
Regras de negócio aplicadas
Exemplo de resposta
{
"persistencia": "postgres",
"porStatus": {
"INTEGRADO": 14,
"RETRY": 1,
"ERRO": 1
}
}Câmbio
/api/mobility/v1/cotacoesX-Api-KeyConsultar câmbio
Cotação PTAX do Banco Central por moeda e data, com os últimos dias úteis.
Substitui: Financeiro/CotacaoMoeda.svc → BuscarCotacaoUltimosDias (ConsultarCâmbio)
Fonte oficial PTAX do Banco Central, boletim de fechamento, cotação de venda.
Devolve as últimas N cotações de dias úteis até a data pedida, da mais recente para a mais antiga.
Cada item traz id estável (moeda-tipo-dia), a data em dia e em DateTime, e o moedaId ecoado quando informado — a tabela de MoedaId é da plataforma, não do Banco Central.
Parâmetros
| moeda | query · obrigatório | Código ISO da moeda. | USD |
| tipo | query | Tipo de produto (mantido por compatibilidade). | Carro |
| moedaId | query | Id da moeda na plataforma da Mobility. Quando informado, volta ecoado em cada item. | 1 |
| data | query | Data de referência. Aceita YYYY-MM-DD ou DateTime completo; a PTAX é o fechamento do dia, então a hora é ignorada no cálculo. Padrão: hoje. | 2026-09-10T00:00:00 |
| dias | query | Quantidade de dias úteis (1 a 30). | 3 |
Respostas
- 200Lista de cotações.
- 400Moeda ausente ou inválida.
- 404Sem cotação no período.
- 502Banco Central indisponível.
Regras de negócio aplicadas
Exemplo de resposta
[
{
"id": "USD-Carro-2026-09-10",
"moedaId": 1,
"moeda": "USD",
"tipo": "Carro",
"data": "2026-09-10",
"dataHora": "2026-09-10T00:00:00",
"valor": 5.0846,
"fonte": "PTAX"
}
]Faturamento B2B
/api/mobility/v1/faturamento/limiteX-Api-KeyLimite e elegibilidade do Faturado
Diz se o cliente pode emitir no Faturado e quanto do limite de crédito ainda está livre.
É a rota que a plataforma de reservas consulta antes de oferecer a opção Faturado (RN-01). Devolve o limite aprovado, o valor em aberto em pré-DUPs e DUPs, o disponível e a lista de motivos de bloqueio.
Com o parâmetro valor, responde também se aquela reserva específica cabe no limite (RN-02), em permitido e motivos.
O bloqueio por atraso usa FAT_BLOQUEIO_DIAS_UTEIS (padrão 2 dias úteis após o vencimento, RN-03) e o alerta de consumo usa FAT_ALERTA_LIMITE_PCT (padrão 90%, RN-05).
Parâmetros
| cnpj | query · obrigatório | CNPJ do cliente, com ou sem máscara. | 12345678000190 |
| valor | query | Valor líquido da reserva que se quer emitir, para a checagem do limite. | 1850.42 |
Respostas
- 200Situação do limite. Com valor, devolve permitido, motivos e a situação completa.
- 400CNPJ não informado.
- 503Banco de dados do faturamento não configurado.
Regras de negócio aplicadas
Exemplo de resposta
{
"cnpj": "12345678000190",
"cliente": "CLIENTE EXEMPLO LTDA",
"cadastrado": true,
"ativo": true,
"limiteAprovado": 100000,
"emAberto": 80000,
"disponivel": 20000,
"percentualUsado": 80,
"alerta": false,
"bloqueado": false,
"motivos": [],
"dupsEmAberto": [
{
"numero": "FAT1001",
"status": "Emitida",
"valor": 80000,
"vencimento": "2026-10-20",
"diasUteisAtraso": 0
}
]
}/api/mobility/v1/faturamento/dupsX-Api-KeyListar pré-DUPs e DUPs
Lote em aberto e histórico de duplicatas, com filtro por cliente e por status.
Status possíveis: Pré-DUP (lote aberto do período), Pendência (reprovada no corte), Emitida, Enviada, Paga e Cancelada.
A listagem é a mesma fonte da tela Faturamento do painel.
Parâmetros
| cnpj | query | Filtra por cliente. | 12345678000190 |
| status | query | Pré-DUP, Pendência, Emitida, Enviada, Paga ou Cancelada. | Pré-DUP |
| limite | query | Quantidade máxima de registros (padrão 100). | 50 |
Respostas
- 200Lista de DUPs com quantidade e valor total.
- 503Banco de dados do faturamento não configurado.
Regras de negócio aplicadas
/api/mobility/v1/faturamento/dupsX-Api-KeyIncluir reserva faturada na pré-DUP
Lança uma reserva (ou um reembolso) na pré-DUP aberta do cliente, criando o lote se for a primeira.
O lote é escolhido pela data de emissão da reserva, nunca pelo check-in (RN-06), e segue o calendário do cliente (RN-07).
A primeira reserva do período cria a pré-DUP já com número definitivo, que nunca é reaproveitado (RN-08).
A mesma reserva não entra duas vezes: a chave é {número da DUP}-{file}-{P|R} (controle C2). Se chegar de novo com valor diferente, a resposta traz a divergência.
O líquido é recalculado pela fórmula do guia e conferido contra o valor da plataforma, com tolerância de FAT_TOLERANCIA_CENTAVOS (RN-11).
Linhas trazidas por RN-10, RN-22 e RN-24 podem ter emissão de períodos anteriores — a rota aceita.
Normalmente esta rota não é chamada à mão: a importação de venda com recebimento FATURADO já alimenta a pré-DUP.
Corpo
Objeto com cnpj, file, emissao, tarifaBrl e os demais campos da linha (loc, passageiro, fornecedor, taxaServico, comissao, produto).
Respostas
- 201Linha incluída. Devolve a DUP, o vencimento e o valor total atualizado.
- 200Linha já existia: devolve a mesma linha com reaproveitada: true.
- 422Campos obrigatórios ausentes, cliente sem cadastro de faturamento ou limite estourado.
- 503Banco de dados do faturamento não configurado.
/api/mobility/v1/faturamento/dups/{numero}X-Api-KeyDetalhe da DUP
Cabeçalho, linhas, totais por produto e nome do arquivo do kit — a mesma fonte do PDF e do Excel.
As linhas trazem todas as colunas do Excel da Mobility: file, loc, passageiro, emissão, check-in e check-out com cidade, fornecedor, tarifa em USD e em BRL, encargo, taxa de serviço, comissão e líquido.
Os totais são separados por produto (PACOTE e REEMBOLSO_PACOTE), como no modelo enviado pelo Financeiro.
O campo arquivoKit devolve o nome padronizado do arquivo da versão atual (com sufixo de versão a partir da segunda emissão).
Parâmetros
| numero | path · obrigatório | Número da DUP. | FAT1001 |
Respostas
- 200DUP, cliente, emissor, totais por produto e linhas.
- 404DUP não encontrada.
- 503Banco de dados do faturamento não configurado.
Regras de negócio aplicadas
/api/mobility/v1/faturamento/dups/{numero}/fecharSessão ou X-Api-KeyFechar DUP ou retirar reserva
Roda a validação linha a linha e emite a DUP, ou manda para a fila de pendências com o motivo.
Sem corpo, executa o corte: valida cada linha (RN-11) e emite (RN-12) ou registra pendência (RN-13).
Com { retirar: "<file>", motivo: "...", destino: "proximo-lote" | "cancelar" }, retira a reserva. Na pré-DUP ela só sai do lote (RN-09). Em DUP emitida a mais de FAT_BLOQUEIO_DIAS_UTEIS do vencimento, a DUP é recalculada mantendo número e vencimento, a versão sobe e a reserva ativa volta para a pré-DUP aberta (RN-10, RN-20, RN-23); a menos que isso, ou já paga, a linha fica e o crédito entra como reembolso na próxima pré-DUP (RN-22, RN-24).
Retirada e fechamento manual são ações de alçada: ficam no log imutável da DUP com quem fez, quando e os valores antes e depois (RN-25, RN-28).
A solicitação de boleto/bolecode na Omie e o envio do kit são a Parte 2 do projeto: hoje a rota emite a DUP e deixa o instrumento de pagamento pendente.
Parâmetros
| numero | path · obrigatório | Número da DUP. | FAT1001 |
Corpo
Vazio para fechar, ou { retirar, motivo } para retirar uma reserva.
Respostas
- 200DUP emitida, ou reserva retirada com o destino do crédito.
- 409Fechamento reprovado: a DUP foi para pendências e a resposta lista cada motivo.
- 422DUP inexistente, já fechada, ou reserva não encontrada no lote.
- 503Banco de dados do faturamento não configurado.
Regras de negócio aplicadas
/api/mobility/v1/faturamento/conciliacaoX-Api-KeyRelatório de conciliação
Executa os controles de integridade do guia e aponta cada falha com o registro responsável.
Roda hoje os controles C2 (unicidade), C3 (valor), C6 (fechamento) e C9 (fila de pendências), além da revalidação de líquido de cada linha (RN-11).
C1, C4, C5, C7 e C10 dependem de dados que ainda não chegam ao orquestrador (reservas ativas na plataforma, boleto no banco, cancelamentos e base do WOOFFICE) — aparecem na documentação com o motivo.
A mesma execução roda todo dia pela rotina de faturamento e o resultado fica na tela Faturamento.
Respostas
- 200Lista de controles com ok, quantidade de falhas e os registros envolvidos.
- 503Banco de dados do faturamento não configurado.
Regras de negócio aplicadas
/api/internal/faturamentoCronRotina diária do faturamento (cron)
Executada pela Vercel todo dia às 6h UTC. Fecha os lotes com corte vencido e roda a conciliação.
O fechamento automático só acontece com a configuração FAT_CORTE_AUTOMATICO ligada. Desligada (padrão), a rotina apenas aponta os lotes com data de corte vencida, para conferência manual.
A janela definitiva do processamento em lote é a decisão D10 (RN-14).
Respostas
- 200Lotes fechados e resumo da conciliação.
- 401CRON_SECRET inválido.
Comissões B2B
/api/mobility/v1/comissoesX-Api-KeyEstoque de comissões
Comissões B2B por cliente e status (Bloqueada, Disponível, Em COM, Paga, Cancelada), com totais.
Cada comissão tem um único status (RC-05). Estornos aparecem com valor negativo e ajustes (RC-37) com valor positivo.
A chave da comissão é ID da reserva + File + LOC + tipo + versão (RC-04), mais o componente quando a reserva tem duas comissões legítimas.
Parâmetros
| cnpj | query | CNPJ do cliente B2B (só dígitos ou formatado). | 32549170000116 |
| status | query | Um ou mais status separados por vírgula. | Disponível,Em COM |
| limite | query | Máximo de linhas (padrão 2000). |
Respostas
- 200quantidade, porStatus e comissoes.
- 503Banco de dados do módulo de comissões não configurado.
/api/mobility/v1/comissoesX-Api-KeyRegistrar comissões da plataforma
Recebe comissões geradas pela plataforma (RC-01). Alternativa à entrada automática pela importação da venda.
Corpo: uma comissão ou { comissoes: [...] } com cnpj, reservaId, file, loc, valor, pct, netada (ou valorAbatido), pagamentoNoLocal, versao e os campos de exibição (passageiro, emissão, check-in/out, cidades, forma de pagamento, locadora, tarifas).
Netada ou com valor abatido igual ao valor: não entra no estoque (RC-02). Sem indicador de netagem ou sem tipo da reserva: fila de pendências.
Pré-paga nasce Disponível; pagamento no local nasce Bloqueada (RC-03). Mesma chave com mesmos valores é idempotente; com valores diferentes vai para pendências (RC-04).
Corpo
Comissão ou lista de comissões.
Respostas
- 200Resultado por comissão: criada, existente, atualizada, alterada, netada ou pendencia.
- 422Todas as comissões foram para pendências ou o corpo está vazio.
/api/mobility/v1/comissoes/eventosX-Api-KeyEventos da reserva (cancelamento, alteração, liberação)
Cancelamento e alteração de reserva geram cancelamento ou estorno; liberação no local libera a comissão bloqueada.
tipo "cancelamento": comissão Bloqueada ou Disponível passa a Cancelada (RC-07); Em COM ou Paga gera estorno, Bloqueado enquanto a original estiver Em COM (RC-08).
tipo "alteracao" (versao maior): Disponível é atualizada na mesma linha; Em COM ou Paga gera estorno da versão anterior e comissão da versão nova (RC-08).
tipo "liberacao-local": libera a comissão de pagamento no local depois que a Mobility recebeu a própria comissão da locadora (RC-03, D5).
AV enviado com comissão cancelada ou alterada recebe notificação, com as NFs já anexadas (RC-36).
Corpo
{ tipo, ... } conforme o evento.
Respostas
- 200Comissões canceladas, estornos gerados ou reservas liberadas.
- 422Tipo inválido ou dados da reserva ausentes.
/api/mobility/v1/comissoes/documentosX-Api-KeyAVs e COMs
Lista os avisos e as duplicatas de comissão. AV e COM compartilham o número (RC-14).
AV cancelado, invalidado ou substituído ocupa o número para sempre; a COM correspondente nunca existirá.
Parâmetros
| cnpj | query | Filtra por cliente. |
Respostas
- 200documentos com status do AV e da COM, valor e vencimento.
Regras de negócio aplicadas
/api/mobility/v1/comissoes/documentos/{numero}X-Api-KeyDetalhe do AV/COM e arquivos
Linhas, quadro por locadora, conferência das NFs e log. Com ?arquivo=pdf|xlsx&tipo=AV|COM baixa o documento.
PDF e Excel são gerados no mesmo momento e da mesma fonte: total do Excel = total do PDF = valor da COM = título na Omie (seção 6.4).
Nome do arquivo: AV<número>_<CNPJ>_<AAAAMMDD> e COM<número>_<CNPJ>_<vencimento>.
Parâmetros
| numero | path · obrigatório | Número do AV/COM. | 1001 |
| arquivo | query | pdf ou xlsx. | |
| tipo | query | AV (padrão) ou COM. |
Respostas
- 200Documento com linhas, conferência e log, ou o arquivo.
- 404Documento não encontrado.
/api/mobility/v1/comissoes/conciliacaoX-Api-KeyControles C1 a C13 e relatórios de gestão
Controles de integridade, estoque por status e cliente, aging, COMs em aberto, previsão de caixa e base do passivo (RC-40).
Com ?formato=xlsx devolve o fechamento em Excel.
Parâmetros
| formato | query | xlsx para baixar a planilha. |
Respostas
- 200conciliacao e gestao.
Regras de negócio aplicadas
/api/mobility/v1/comissoes/legadoX-Api-KeyMigração do Woofice (Fase 4)
Carrega comissões do legado como Disponível ou Paga (C10).
Paga no legado nunca aparece como Disponível; Disponível do legado entra no estoque. O resumo devolve os totais para conciliar com o razão na data de corte.
Corpo
{ comissoes: [{ ...comissão, statusLegado }] }
Respostas
- 200Criadas, existentes, pendências e totais por status.
/api/internal/comissoesCronRotina diária das comissões (cron)
Todo dia às 9h UTC: reenvia títulos que falharam, sincroniza as COMs com a Omie e roda C1 a C13 (inclui a consulta diária de DUP vencida, C13).
Eventos
/api/mobility/v1/eventosX-Api-KeyEventos da Omie (polling)
Eventos recebidos dos webhooks da Omie, para leitura incremental.
Alternativa ao callback enquanto a Mobility não tiver um endpoint próprio. Guarde o campo proximoDesde e envie no parâmetro desde da próxima chamada.
Parâmetros
| desde | query | Data ISO do último evento lido. | 2026-09-11T00:00:00Z |
| limite | query | Máximo de eventos (até 500). | 100 |
Respostas
- 200Lista de eventos e o cursor proximoDesde.
Regras de negócio aplicadas
Webhooks
/api/omie/webhookappKey OmieReceptor de webhooks da Omie
URL cadastrada no Developer Omie. Grava cada evento e repassa para a Mobility.
A Omie chama esta rota a cada evento dos tópicos cadastrados. A URL é cadastrada no Developer Omie sem token, porque a Omie não oferece esse recurso.
A autenticidade vem do appKey que a Omie envia no corpo de cada evento: ele precisa ser igual ao OMIE_APP_KEY da integração. Eventos sem appKey, como a notificação de teste, recebem 200 e são ignorados.
O orquestrador responde em menos de 7 segundos, grava o evento na base Eventos Omie, descobre o File pelos códigos MOB- e encaminha para a Mobility.
No painel de testes os eventos são simulações marcadas como simulado, autenticadas por um header interno do servidor.
Corpo
Evento no formato da Omie: messageId, topic, event, author.
Respostas
- 200Evento recebido (recebido: true) ou ignorado por não trazer appKey (recebido: false).
- 403appKey do evento é de outra conta Omie.
Regras de negócio aplicadas
Configuração
/api/configuracoesSessão ou X-Api-KeyConsultar configurações
Parâmetros efetivos do orquestrador e de onde cada um veio (banco de dados, .env ou padrão).
Lê as tabelas Configurações e Formas de recebimento e pagamento do banco de dados. Cada item informa a origem do valor.
Segredos (chaves da Omie, da Mobility, tokens) nunca aparecem. Use recarregar=1 para ignorar o cache de 60 segundos.
A alteração é feita com PATCH na mesma rota, só pelo perfil Admin do painel.
Parâmetros
| recarregar | query | 1 para reler o banco de dados na hora. | 1 |
Respostas
- 200Itens, formas de recebimento e pagamento, pendências e origem de cada valor.
- 401Sem sessão do painel e sem X-Api-Key válida.
Regras de negócio aplicadas
Exemplo de resposta
{
"fonte": "banco de dados",
"itens": [
{
"chave": "OMIE_CATEG_RECEITA",
"valor": "1.01.02",
"origem": "banco de dados",
"grupo": "Omie",
"tipo": "texto"
}
],
"formas": [
{
"codigo": 4,
"legenda": "CC",
"tipo": "Recebimento",
"prazo": 30
}
],
"pendencias": [
"MOBILITY_WEBHOOK_URL (base Configurações; sem ela, eventos só por polling)"
]
}/api/configuracoesSessão ou X-Api-KeyAlterar configuração
Altera um parâmetro ou o prazo de uma forma de recebimento/pagamento, gravando no banco de dados.
Corpo { chave, valor } para um parâmetro ou { forma: { tipo, codigo, prazo } } para um prazo.
Valida o tipo (número, booleano), grava no banco de dados, invalida o cache e registra a alteração no Log de integração com o e-mail de quem alterou.
Corpo
{ "chave": "OMIE_CATEG_RECEITA", "valor": "1.01.02" } ou { "forma": { "tipo": "Recebimento", "codigo": 4, "prazo": 30 } }
Respostas
- 200Configuração atualizada.
- 403Perfil diferente de Admin.
- 422Chave desconhecida ou valor inválido.
Regras de negócio aplicadas
/api/credenciaisSessão do painelMinhas credenciais de API
Lista as chaves de API do usuário logado, com escopo, validade e último uso.
Alimenta a tela Credenciais do painel. Cada item traz nome, prefixo, escopo, se está ativa, quando foi criada, quando expira, último uso e quantidade de usos.
O valor da chave nunca é devolvido: no banco ficam apenas o prefixo e o hash SHA-256.
O perfil Admin vê as credenciais de todos (parâmetro todas=1); os demais perfis veem só as próprias.
Parâmetros
| todas | query | 1 para listar de todos os usuários (só Admin). | 1 |
Respostas
- 200Lista de credenciais, mais recentes primeiro.
- 401Sem sessão do painel.
Regras de negócio aplicadas
Exemplo de resposta
{
"credenciais": [
{
"nome": "Middleware Mobility produção",
"prefixo": "K2m9Qd7xTa",
"dono": "hugo@mobility.com.br",
"escopo": "Integração total",
"ativa": true,
"criadaEm": "2026-10-07T12:00:00.000Z",
"expiraEm": null,
"ultimoUso": "2026-10-07T13:40:11.000Z",
"usos": 128
}
]
}/api/credenciaisSessão do painelCriar credencial de API
Gera uma chave nova para o usuário logado e devolve o valor uma única vez.
Corpo: { nome, escopo, expiraEm?, observacao? }. O escopo é "Integração total" (envia vendas e eventos) ou "Somente leitura" (só consultas GET).
A resposta traz a chave completa no formato mob_<prefixo>_<segredo>. Guarde na hora: ela não pode ser recuperada depois, só substituída por uma nova.
O perfil Leitor só cria credenciais somente leitura.
Corpo
{ "nome": "Middleware Mobility produção", "escopo": "Integração total", "expiraEm": "2027-10-07" }
Respostas
- 201Credencial criada. Devolve a chave em texto puro (única vez).
- 403Perfil Leitor tentando criar credencial de integração total.
- 422Nome ausente, escopo inválido ou data de expiração no passado.
Regras de negócio aplicadas
/api/credenciaisSessão do painelRevogar credencial
Desativa uma chave na hora, registrando quem revogou.
Parâmetro id com o identificador da credencial. A chave para de funcionar em até um minuto (tempo do cache de validação).
Cada pessoa revoga as próprias credenciais; o perfil Admin revoga qualquer uma.
Parâmetros
| id | query · obrigatório | Identificador da credencial. |
Respostas
- 200Credencial revogada.
- 403Credencial de outro usuário (perfil diferente de Admin).
- 404Credencial não encontrada.
Regras de negócio aplicadas
Operação
/api/logsSessão do painelTrilha de auditoria das chamadas
Quem chamou cada rota, de qual IP e país, com horário, retorno e tempo de resposta.
Alimenta a tela Logs do painel. Cada registro traz data e hora, rota, método, status HTTP, classificação do retorno, duração, origem da chamada, identificação de quem chamou, IP, país, cidade, user agent, parâmetros, tamanho do envio e a referência de negócio (File ou chave da reserva).
Filtros: horas (ou desde e ate), rota, metodo, origem, resultado e limite. A resposta inclui um resumo com totais por resultado, origem, rota, IP e país, além do tempo médio e do percentil 95.
Exige sessão do painel: a trilha mostra IPs e identificações de todos os chamadores, por isso não é exposta pela chave de API.
Parâmetros
| horas | query | Período em horas a partir de agora (0 = tudo). | 24 |
| desde | query | Data ISO inicial (alternativa a horas). | 2026-10-01T00:00:00Z |
| ate | query | Data ISO final. | |
| rota | query | Filtra por trecho da rota. | /vendas |
| metodo | query | GET, POST ou PATCH. | POST |
| origem | query | Mobility (API key), Painel, Webhook Omie, Cron, Simulação do painel ou Desconhecida. | |
| resultado | query | Sucesso, Rejeitado, Não autorizado ou Erro. | |
| limite | query | Máximo de registros (até 1000). | 200 |
Respostas
- 200Resumo e lista de chamadas, mais recentes primeiro.
- 401Sem sessão do painel.
Regras de negócio aplicadas
Exemplo de resposta
{
"resumo": {
"total": 42,
"porResultado": {
"Sucesso": 39,
"Erro": 3
},
"porOrigem": {
"Mobility (API key)": 30,
"Painel": 12
},
"duracaoMedia": 412,
"duracaoP95": 1180
},
"acessos": [
{
"quando": "2026-10-01T13:22:05.411Z",
"rota": "/api/mobility/v1/vendas",
"metodo": "POST",
"status": 202,
"resultado": "Sucesso",
"duracaoMs": 388,
"origem": "Mobility (API key)",
"identificacao": "X-Api-Key da Mobility",
"ip": "177.45.12.8",
"pais": "BR",
"cidade": "Sao Paulo",
"referencia": "File 00341130"
}
]
}/api/mobility/v1/healthPúblicaSaúde do orquestrador
Estado do serviço e configurações pendentes, sem expor segredos.
Rota pública. Mostra modo de persistência, contagem por status e a lista de variáveis de ambiente que ainda faltam.
Respostas
- 200Estado do serviço.
/api/internal/retryCronRodada de reprocessamento (cron)
Executada pela Vercel a cada 10 minutos. Pode ser disparada manualmente no painel.
Reprocessa até 5 reservas em RETRY e reenvia até 20 eventos pendentes para a Mobility.
Respostas
- 200Resumo do que foi reprocessado.
- 401CRON_SECRET inválido.
Regras de negócio aplicadas
Conector MCP
/api/mcpX-Api-KeyConector MCP (consulta por assistente de IA)
Servidor MCP somente de leitura: o time da Mobility conecta Claude, ChatGPT ou Gemini e pergunta em linguagem natural.
Fala o protocolo MCP (Model Context Protocol) no transporte HTTP streamable: JSON-RPC 2.0 em POST, sem sessão.
Oito ferramentas de consulta: resumo da operação, situação de uma reserva por File, catálogo de rotas, detalhe de uma rota, regras de negócio, integrações disponíveis, resumo do faturamento B2B e indicadores de uso da API.
Nenhuma ferramenta altera dado. Nada de infraestrutura sai nas respostas: só número operacional e contrato de API.
Autentica com a mesma credencial das outras rotas, em X-Api-Key ou Authorization: Bearer. Credencial somente leitura funciona, mesmo o protocolo usando POST.
Cada chamada entra na trilha de auditoria com rota, origem, IP e retorno, como qualquer outra.
Corpo
Mensagem JSON-RPC do protocolo MCP: initialize, tools/list, tools/call, ping.
Respostas
- 200Resposta JSON-RPC do método chamado.
- 202Notificação recebida (sem resposta, como pede o protocolo).
- 400Corpo não é JSON válido.
- 401Credencial ausente, inválida, revogada ou expirada.
- 405Chamada GET: o conector não abre canal de eventos do servidor.
Regras de negócio aplicadas
Exemplo de resposta
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"content": [
{
"type": "text",
"text": "{ \"periodo\": { \"dias\": 7, \"exportacoesRecebidas\": 42 } }"
}
],
"structuredContent": {
"periodo": {
"dias": 7,
"exportacoesRecebidas": 42,
"integradas": 40,
"comErro": 2
}
},
"isError": false
}
}Regras de negócio
Numeradas para referência cruzada com as rotas. Regras marcadas como provisórias aguardam validação da Mobility.
Entrada
Autenticação por chave
Toda rota da Mobility exige o header X-Api-Key.
- A chave é gerada pela IAXYS e fica na variável MOBILITY_API_KEY.
- Chave ausente ou diferente devolve 401. Servidor sem chave configurada devolve 503.
- A comparação é feita em tempo constante para não vazar informação por tempo de resposta.
- A chave pode ser a única do ambiente (MOBILITY_API_KEY) ou uma credencial criada no painel (RN21), que tem escopo e validade próprios.
- O painel de testes não usa chave: as chamadas feitas por lá são assinadas no servidor em nome da sessão de quem está logado, e aparecem na auditoria com o e-mail da pessoa.
Idempotência por reserva
Cada reserva é identificada por empresa, filial, File e CodigoWooMobil.
- Chave: {empresa}-{filial}-{file}-{CodigoWooMobil da reserva}. Exemplo: 29-26-00341130-341131.
- A Mobility envia um payload por reserva. Reservas diferentes do mesmo File são aceitas e ficam agrupadas.
- Reenviar a mesma reserva devolve 409 com o estado atual, a menos que ela esteja em ERRO. Nesse caso o novo payload substitui o anterior e o processamento recomeça.
- Na Omie, cada registro leva um código de integração único. Se a Omie responder que o registro já existe, o orquestrador consulta e reaproveita, sem duplicar.
Validação do contrato
O payload é validado campo a campo antes de ser aceito.
- Obrigatórios: file, empresa, filial, cliente, dataCriacao e ao menos uma reserva em movimentos.
- Cada reserva exige codigoWooMobil, localizadorFrontOffice, dataRetirada, dataEntrega e valores.tarifa.
- Cada recebimento exige codigoWooMobil, valor e formaRecebimento. Cada pagamento exige codigoWooMobil e valor.
- Números em texto são convertidos. Campos extras são aceitos e guardados para auditoria.
Proteção de dados (PCI e LGPD)
Número de cartão, validade e documentos nunca são gravados completos.
- Número do cartão vira **** **** **** 1234 antes de qualquer gravação. A validade é descartada.
- Documento do condutor é reduzido aos 3 últimos dígitos.
- Na Omie, os dados do cartão entram apenas na observação do título: bandeira, 4 últimos dígitos, NSU, autorização e operadora.
Omie
Cliente pagador
O cliente é localizado na Omie pelo código MOB-{id do cliente na Mobility}.
- O orquestrador consulta geral/clientes pelo codigo_cliente_integracao MOB-{cliente}.
- Se não existir e o payload trouxer clienteDados, o cliente é cadastrado com UpsertCliente.
- Se não existir e não houver clienteDados, a reserva vai para ERRO. A carga inicial de clientes resolve esse caso.
Cadastro do cliente pelo payload
Cliente que ainda não existe na Omie é criado a partir do bloco clienteDados da própria venda.
- A busca é pelo código de integração MOB-{cliente}. Achou, usa o cadastro que já está na Omie e ignora o bloco — o orquestrador não sobrescreve cadastro existente.
- Não achou e o bloco veio: cria o cliente com razão social, nome fantasia, CNPJ ou CPF, e-mail, contato, telefone (DDD e número separados), inscrição estadual e endereço completo, com a tag mobility.
- Pessoa física é deduzida do documento: 11 dígitos marca pessoa física na Omie, 14 marca jurídica.
- Não achou e o bloco não veio: a venda para com erro de cadastro e fica aguardando a carga inicial de clientes ou o reenvio com o bloco.
- Obrigatórios: razaoSocial e cnpjCpf. O resto é opcional no contrato, mas a Omie exige endereço e documento na emissão de nota e na cobrança.
Ordem de Serviço (capa da venda)
Cada reserva gera uma OS na Omie com um item de serviço por locação.
- cCodIntOS = MOB-{chave da reserva}. Etapa inicial configurável (OMIE_ETAPA_OS, padrão 10).
- Item: serviço OMIE_COD_SERVICO_LOCACAO, quantidade 1, valor da tarifa, descrição com locadora, localizador, rota, classe e período.
- Os dados adicionais da nota levam o File, os localizadores e a reserva de origem, quando houver.
- Pode ser desligada com OMIE_CRIAR_OS=false. Nesse caso só os títulos financeiros são criados.
Contas a receber
Cada recebimento vira um título por parcela, com vencimento pela forma de recebimento.
- Código: MOB-{file}-CRE-{CodigoWooMobil}-R{nº do recebimento}-P{nº da parcela}. Dois recebimentos da mesma reserva geram títulos distintos.
- Parcelas: o valor é dividido igualmente e a diferença de centavos fica na última parcela.
- Vencimento: dataVencimento do payload, se vier. Senão, a data de confirmação somada ao prazo da forma de recebimento. Cada parcela seguinte soma 30 dias.
- Os prazos por forma ficam na tabela Formas de recebimento e pagamento do banco de dados. Valores iniciais: FATURADO e CC 30 dias, CARTAO_CORPORATIVO e FATURADO + CARTAO 30 dias, BOLETO 7 dias, demais formas no mesmo dia. O intervalo entre parcelas vem de INTERVALO_PARCELAS_DIAS.
- Categoria OMIE_CATEG_RECEITA e conta corrente OMIE_CONTA_CORRENTE. A observação traz forma de recebimento, localizadores, crédito de reemissão e reembolso.
Contas a pagar
Cada pagamento vira um título, classificado como comissão, reembolso ou despesa.
- Código: MOB-{file}-CPA-{CodigoWooMobil}-{nº do pagamento}.
- Favorecido: a pessoa do pagamento (MOB-{pessoa}). Se for o próprio cliente, ou não vier, usa o cliente da venda.
- Categoria: OMIE_CATEG_COMISSAO quando pagamentoDeComissao é verdadeiro, OMIE_CATEG_REEMBOLSO quando é reembolso (RN09) e OMIE_CATEG_DESPESA nos demais casos.
- Vencimento: dataVencimento do payload ou a data de confirmação somada ao prazo da forma de pagamento (tabela Formas de recebimento e pagamento, padrão PRAZO_PAGAMENTO_DIAS).
- Comissão repassada no pagamento e comissão da reserva são tratadas como informações independentes, como orientou a Mobility.
Reembolso ao cliente
Pagamento ao próprio cliente numa venda com ValorReembolso vira devolução.
- Um pagamento é reembolso quando não é comissão, o favorecido é o cliente e algum recebimento da reserva tem valorReembolso maior que zero.
- O título a pagar recebe a categoria de reembolso e a observação Reembolso ao cliente.
- Cancelamento continua fora do fluxo: a Mobility usa CancelarVenda e a regra (contas a pagar em categoria de abatimento) aguarda a especificação técnica.
Multi-reserva e vínculo entre reservas
Reservas com o mesmo File formam uma venda. A reserva vinculada aponta para a origem.
- Cada reserva gera sua própria OS e seus títulos. A consulta por File junta todas.
- O campo reservaVinculada guarda o localizador da reserva de origem e aparece na OS e nas consultas.
- O crédito de reemissão da reserva de origem é registrado na observação do título. O abatimento automático aguarda definição da Mobility.
Datas e valores
Datas vão para a Omie em dd/mm/aaaa e valores com duas casas.
- Datas ISO do payload são convertidas para dd/mm/aaaa, formato exigido pela Omie.
- A Omie trabalha só em reais. Reservas em moeda estrangeira já chegam com a tarifa convertida pela Mobility, e o câmbio aplicado fica registrado.
Consultas
Crédito e rentabilidade
Rentabilidade = total a receber menos total a pagar do File.
- Situação do item: Real quando o título está baixado na Omie (recebido, pago ou liquidado), Previsto nos demais casos.
- percentualRentabilidade = rentabilidade dividida pelo total a receber, vezes 100.
- Se a Omie falhar para algum título, o valor do orquestrador é usado e a falha aparece em avisos.
Câmbio PTAX
Cotação de venda do boletim de fechamento do Banco Central.
- Dias sem cotação (fins de semana e feriados) são pulados. A busca volta até 12 dias além do pedido.
- Cada cotação obtida fica gravada e é reaproveitada nas próximas consultas.
- O parâmetro tipo é mantido por compatibilidade com o WOOFFICE. A fonte é a mesma para todos os tipos.
Resiliência
Limite de uso da Omie e novas tentativas
Bloqueio por consumo da Omie coloca a reserva em RETRY, reprocessada a cada 10 minutos.
- Mensagens como MISUSE_API_PROCESS e falhas de rede são tratadas como temporárias.
- Cada chamada tenta uma segunda vez após 2,5 segundos. Persistindo, a reserva vai para RETRY com nova tentativa em 10 minutos.
- A espera (RETRY_MINUTOS) e o limite de tentativas (MAX_TENTATIVAS, padrão 12) ficam na tabela Configurações do banco de dados. Esgotado o limite, a reserva vai para ERRO e precisa de reprocessamento manual.
- Erros de dados (cadastro ausente, categoria inválida) vão direto para ERRO.
Ciclo de status
RECEBIDO → ENVIANDO → INTEGRADO, RETRY ou ERRO.
- RECEBIDO: payload aceito e gravado.
- ENVIANDO: chamadas à Omie em andamento.
- INTEGRADO: cliente, OS e todos os títulos criados.
- RETRY: bloqueio temporário da Omie, nova tentativa agendada.
- ERRO: problema de dados ou tentativas esgotadas. O campo erros explica cada etapa.
Webhooks
Recepção de eventos da Omie
Eventos são validados, gravados e ligados ao File da Mobility.
- A Omie não oferece token no webhook. A URL é cadastrada sem parâmetros e a autenticidade vem do appKey enviado no corpo de cada evento.
- appKey igual ao OMIE_APP_KEY: evento aceito. appKey diferente: 403. Sem appKey (notificação de teste): 200 e ignorado.
- O appKey não é gravado no histórico do evento.
- A resposta sai antes de 7 segundos, limite da Omie. O repasse para a Mobility acontece em segundo plano.
- O File é descoberto pelos códigos de integração MOB- presentes no evento.
Entrega para a Mobility
Callback assinado com HMAC-SHA256, com nova tentativa a cada 10 minutos.
- Tipos: venda.status (fim do processamento de uma reserva) e omie.evento (evento repassado da Omie).
- Headers: X-Iaxys-Event, X-Iaxys-Delivery e X-Iaxys-Signature com o HMAC-SHA256 do corpo usando MOBILITY_WEBHOOK_SECRET.
- Respostas fora de 2xx são reenviadas pelo cron, até 30 tentativas.
- A URL de destino fica na tabela Configurações do banco de dados (MOBILITY_WEBHOOK_URL). Sem ela, os eventos ficam disponíveis na rota de polling. O segredo do HMAC fica no .env.
Configuração
Parâmetros de negócio no banco de dados
Categorias, conta corrente, serviço, prazos e URL de callback ficam na tabela Configurações.
- Prioridade de cada chave: registro ativo com valor na tabela Configurações do banco de dados, depois a variável de ambiente de mesmo nome, depois o padrão do código.
- O .env guarda só segredos e infraestrutura: OMIE_APP_KEY, OMIE_APP_SECRET, MOBILITY_API_KEY, MOBILITY_WEBHOOK_SECRET, CRON_SECRET, BANCO_DADOS_TOKEN, SESSION_SECRET e, se usado, DATABASE_URL.
- O orquestrador relê o banco de dados a cada 60 segundos. Alterações feitas pelo painel valem na hora.
- Se o banco de dados ficar indisponível, o último valor lido continua valendo.
Persistência no banco de dados
Vendas, eventos, log e cotações são gravados no banco de dados do orquestrador.
- Tabelas: Vendas recebidas, Eventos Omie, Log de integração, Cotações, Configurações, Formas de recebimento e pagamento e Usuários.
- Payload e resultado de cada reserva ficam em JSON no próprio registro, para auditoria e reprocessamento.
- O banco atual aceita cerca de 3 gravações por segundo. Para volume de produção alto, basta configurar DATABASE_URL e PERSISTENCIA=postgres, sem mudar o contrato.
Auditoria das chamadas
Toda chamada à API é registrada com autor, IP, horário, retorno e duração.
- A origem é deduzida da forma de autenticação: chave da Mobility, sessão do painel, appKey da Omie no webhook, segredo do cron ou simulação do painel. Chave inválida aparece como Desconhecida.
- Também ficam gravados IP, país e cidade (cabeçalhos da Vercel), user agent, parâmetros da URL com tokens mascarados, tamanho do envio, status, duração e a referência de negócio (File ou chave da reserva).
- O registro acontece depois da resposta, então não soma no tempo do cliente, e uma falha na auditoria nunca derruba a chamada.
- Controles na tabela Configurações: AUDITORIA_ATIVA liga e desliga, AUDITORIA_IGNORAR_HEALTH evita o ruído do monitoramento e AUDITORIA_GUARDAR_IP=false mascara o último bloco do IP.
- Consulta pela tela Logs do painel ou pela rota /api/logs, ambas restritas a quem tem sessão.
Credenciais de API por usuário
Cada pessoa cria, acompanha e revoga as próprias chaves na tela Credenciais.
- Formato da chave: mob_<prefixo>_<segredo>. O prefixo identifica o registro e aparece nas telas e nos logs; o segredo tem 32 bytes aleatórios.
- No banco ficam apenas o prefixo e o SHA-256 da chave inteira. O valor completo é exibido uma única vez, na criação, e não pode ser recuperado.
- Escopos: "Integração total" usa qualquer rota; "Somente leitura" só executa GET e recebe 403 nas demais. O perfil Leitor só cria credenciais somente leitura.
- Validade opcional: depois da data a chave é recusada. A revogação é imediata (até um minuto, por causa do cache de validação) e guarda quem revogou.
- Cada uso atualiza o último acesso e o contador (no máximo uma gravação a cada cinco minutos por credencial). A auditoria registra o nome, o prefixo e o dono da credencial usada em cada chamada.
- A chave única do ambiente continua válida, identificada nos logs como "chave única do ambiente".
Conector MCP de consulta
Assistentes de IA da Mobility consultam a operação por um servidor MCP somente de leitura, com a credencial de API de cada time.
- Oito ferramentas de consulta, todas marcadas como somente leitura no protocolo: nenhuma altera dado no orquestrador, na Omie ou na Mobility.
- As respostas são de negócio. O conector não devolve nome de banco, de tabela, de variável de ambiente, de biblioteca ou de provedor, nem caminho de arquivo ou mensagem interna de erro.
- A credencial é a mesma das outras rotas e vale a regra de escopo: credencial somente leitura é suficiente para o conector inteiro.
- Indicadores de uso saem agregados por rota, sem identificar quem chamou — nenhum IP ou nome de usuário de terceiros é exposto.
- Cada chamada é auditada (rota, origem, IP, país, retorno e duração) e aparece na tela Logs, então dá para ver exatamente o que cada assistente consultou.
- Revogar a credencial no painel corta o acesso do assistente em até um minuto.
DUP · Limite de crédito
Faturado só para cliente pré-aprovado
A opção Faturado aparece apenas para cliente com cadastro pré-aprovado e limite de crédito ativo.
- O cadastro fica na tabela Clientes B2B do banco de dados: razão social, CNPJ, endereço, limite aprovado, calendário, forma de cobrança, e-mails de cobrança e situação (Ativo, Suspenso, Em análise).
- A plataforma consulta GET /faturamento/limite antes de oferecer o Faturado. Cliente sem cadastro volta com cadastrado: false e bloqueado: true, com o motivo — a opção não deve ser oferecida.
- A importação de venda com recebimento FATURADO de um cliente sem cadastro não derruba a venda: a reserva entra na Omie normalmente e o motivo fica registrado no log, para o Faturamento cadastrar o cliente.
Limite disponível
Disponível = limite aprovado − (pré-DUPs abertas + DUPs emitidas e não quitadas). Reserva que ultrapasse o disponível não é emitida como Faturado.
- O comprometido soma pré-DUPs, pendências, DUPs emitidas e enviadas. Pagas e canceladas não contam.
- GET /faturamento/limite?cnpj=&valor= responde podeFaturar com o motivo exato da recusa.
- A inclusão de linha recusa com 422 quando o valor estoura o disponível, antes de criar a linha.
Bloqueio por atraso
DUP vencida e não paga há mais de 2 dias úteis bloqueia novas emissões no Faturado. Cartão, Pix e boleto avulso continuam liberados.
- A contagem usa dias úteis, com a mesma tabela de feriados do calendário de corte.
- O prazo é configurável em FAT_BLOQUEIO_DIAS_UTEIS (padrão 2).
- O bloqueio vale só para o Faturado: as outras formas de recebimento seguem o fluxo normal da integração.
Baixa devolve o limite
ParcialA baixa na Omie, após compensação, devolve o limite e desbloqueia o cliente automaticamente.
- A DUP marcada como Paga sai do comprometido na hora: limite de R$ 100 mil com DUP de R$ 80 mil deixa R$ 20 mil livres e volta a R$ 100 mil quando a DUP é quitada.
- Implementada a devolução do limite. O gatilho automático da baixa (webhook de financeiro da Omie ou consulta periódica) é Parte 2 — hoje a quitação é registrada pela rota de fechamento ou pelo painel.
Alerta de consumo do limite
ParcialAo atingir um percentual do limite (90%), a plataforma avisa o cliente e o Financeiro Mobility, com canal para pedido de majoração.
- O percentual é configurável em FAT_ALERTA_LIMITE_PCT (padrão 90).
- A rota de limite e a tela Faturamento já devolvem o sinalizador de alerta e o consumo em percentual.
- O disparo do e-mail de aviso é Parte 2, junto com os outros avisos da régua. Majoração continua sendo alçada financeira, feita no cadastro do cliente.
DUP · Lote e calendário
Lote pela data de emissão
O lote é definido pela data de emissão da reserva. Check-in e devolução do carro não interferem.
- Uma reserva emitida em 06/10 para devolução em janeiro entra no lote de 02 a 11/10.
- O orquestrador usa a data de emissão enviada pela plataforma; na falta dela, a data de criação da reserva.
Calendário por cliente e regra de dia útil
ParcialDecendial padrão para cerca de 90% dos clientes, quinzenal ou próprio para os demais. Fechamento, envio e vencimento caem no próximo dia útil.
- Decendial: emissões do dia 02 ao 11 fecham no dia 12 e vencem no dia 22; do 12 ao 21 fecham no 22 e vencem no dia 02 do mês seguinte; do 22 ao dia 01 fecham no dia 02 e vencem no dia 12.
- Quinzenal: emissões do dia 01 ao 15 fecham no 16 e vencem no último dia do mês; do 16 ao último dia fecham no dia 01 e vencem no dia 15 do mês seguinte.
- Fim de semana e feriado empurram fechamento, envio e vencimento para o próximo dia útil, sem mudar a janela de emissões — como na DUP118333, com vencimento em 02/11/2025 (domingo) movido para 03/11.
- A lista de feriados fica na tabela Feriados do banco de dados, com fonte e manutenção a definir (D11). O calendário padrão vem de FAT_CALENDARIO_PADRAO e o do cliente prevalece.
- Calendário Próprio ainda cai no tratamento do decendial: a lista de clientes com datas próprias é a decisão D5.
DUP · Pré-DUP
Pré-DUP e numeração
A primeira reserva faturada do período cria a pré-DUP já com número sequencial. O número nunca é reaproveitado.
- A numeração usa a série nova com prefixo FAT (FAT_PREFIXO_NUMERO, a partir de FAT_NUMERO_INICIAL = 1001), para separar o faturamento novo do legado DUP do WOOFFICE — preferência do Financeiro registrada na decisão D9.
- A sequência só avança: pré-DUP vazia ou toda cancelada mantém o número e fica com status Cancelada.
- Pré-DUPs e DUPs ficam na tabela Duplicatas (DUP) e cada reserva, na tabela Linhas da DUP.
Tempo real
ParcialInclusões e exclusões são atualizadas em tempo real. Reserva cancelada sai da pré-DUP automaticamente e não é cobrada.
- Cada inclusão ou retirada recalcula o valor total da pré-DUP na hora.
- A saída automática por cancelamento depende do evento de cancelamento da plataforma, que ainda não chega ao orquestrador: hoje a retirada é feita pela rota de fechamento (parâmetro retirar) ou pela tela Faturamento.
Reserva retirada volta para o próximo lote
Reserva ativa retirada de uma DUP volta para a pré-DUP aberta do próximo período daquele cliente. Nunca retorna para um lote passado.
- A retirada mantém os dados de identificação da reserva (File e ID) e recria a linha na pré-DUP aberta, com origem Manual e a DUP de origem registrada.
- A DUP de origem é recalculada mantendo número e vencimento, e a versão sobe (RN-20, RN-23).
- A menos de 2 dias úteis do vencimento vale a RN-22 e o valor vira crédito de reembolso, em vez de mudar de lote.
- Na retirada, a alçada informa se a reserva está ativa (volta ao próximo lote) ou cancelada (não é cobrada, RN-09).
DUP · Fechamento
Validação linha a linha no corte
Na data de corte o sistema valida cada linha: líquido recalculado igual ao valor da plataforma, comissão quando aplicável, campos obrigatórios e cadastro de cobrança completo.
- Fórmula aplicada ao Pacote: Líquido = Tarifa BRL + Encargo + Taxa de serviço − Comissão − Crédito reemissão − Desconto + Multa. Os sinais de crédito, desconto e multa são a decisão D7.
- Reembolso: Líquido = −Tarifa BRL × (1 − retenção), com retenção de 2,1% observada na DUP118333 (FAT_RETENCAO_REEMBOLSO_PCT) — regra a confirmar (D7).
- O arredondamento da plataforma é a fonte: a conferência aceita diferença de até FAT_TOLERANCIA_CENTAVOS (padrão R$ 0,02), que é a maior divergência observada na DUP118333. Acima disso a linha reprova.
- Também são verificados: cliente com endereço e e-mails de cobrança, datas e fornecedor preenchidos e forma de cobrança definida.
- A chave da linha é o File e o ID da reserva, nunca o nome do passageiro: o mesmo passageiro pode ter várias linhas, inclusive com grafia diferente.
Fechamento sem inconsistência
ParcialSem inconsistência, confirma a DUP, solicita boleto/bolecode na Omie, gera o kit e envia, sem intervenção humana.
- Implementado: a validação, a emissão da DUP com número, versão e vencimento, e o registro de quem fechou.
- A solicitação do boleto/bolecode na Omie (integração Itaú já ativa), a geração do kit e o envio do e-mail são a Parte 2 do projeto.
Fila de pendências
Com inconsistência, a DUP vai para a fila de pendências com o motivo. Liberação somente manual, após correção, com registro de quem liberou.
- A DUP fica com status Pendência e a lista de motivos por linha. O fechamento responde 409 com o detalhamento.
- Depois da correção, o fechamento é repetido pela tela Faturamento e o liberador fica no log imutável da DUP.
Processamento em lote fora do horário comercial
ParcialFechamento e envio rodam em lote fora do horário comercial, para não sobrecarregar integrações.
- A rotina /api/internal/faturamento roda todo dia às 6h UTC pela Vercel: fecha os lotes com corte vencido e executa a conciliação.
- O fechamento automático fica desligado por padrão (FAT_CORTE_AUTOMATICO). Com ele desligado a rotina só aponta o que está vencido.
- A janela definitiva é a decisão D10.
DUP · Kit e envio
E-mail com link, sem anexo
Parte 2O e-mail leva somente o link do kit. O acesso pode ter senha simples (8 primeiros dígitos do CNPJ) e a abertura do link é o registro de recebimento.
- Parte 2 do projeto. A validade do link está pré-configurada em FAT_VALIDADE_LINK_DIAS (padrão 90) e aguarda a decisão D6.
Conteúdo do kit
ParcialO kit traz a DUP em PDF, a DUP em Excel (obrigatória) e o instrumento de pagamento.
- A rota de detalhe da DUP já devolve exatamente os dados das duas peças: cabeçalho do cliente, identificação da DUP, emissor, linhas agrupadas por produto, subtotais e total geral.
- O nome do arquivo segue o padrão do guia: DUP{numero}_{CNPJ}_{vencimento AAAAMMDD}[_v{versao}].xlsx.
- A geração do PDF e do .xlsx e o instrumento de pagamento são Parte 2.
Destinatários de cobrança
ParcialCadastro de cobrança do cliente com múltiplos e-mails, mais cópia para e-mail interno da Mobility.
- O campo de e-mails de cobrança já existe no cadastro de Clientes B2B e é exigido na validação do fechamento.
- A migração da base do WOOFFICE é a decisão D3; o envio é Parte 2.
Modelos de e-mail editáveis
Parte 2Assunto e corpo são modelos editáveis pela Mobility, com variáveis (cliente, nº DUP, valor, vencimento, link).
- Parte 2. Os modelos entram como configurações, editáveis na tela Configurações, como as demais.
Forma de cobrança por cliente
ParcialBolecode (padrão), boleto ou crédito em conta, parametrizado por cliente.
- O campo está no cadastro de Clientes B2B e sai na rota de detalhe da DUP, para o rodapé do kit.
- Em crédito em conta não há boleto e os dados bancários da Mobility vão no rodapé. A evolução para somente QR Pix fica para depois.
DUP · Atualizações
Recálculo com mesmo número e vencimento (Plano A)
ParcialAlteração até 2 dias úteis antes do vencimento recalcula a DUP, baixa o boleto anterior, registra o novo e reenvia o kit com aviso de substituição.
- Implementado o núcleo: recálculo mantendo número e vencimento e controle de versão da DUP.
- A baixa e o novo registro de boleto via API Itaú/Omie e o e-mail de atualização são Parte 2, e a viabilidade do Plano A é a decisão D4.
Plano B, mínimo obrigatório
ParcialSe o Plano A não for viável, o sistema notifica o Faturamento por e-mail e sinaliza a DUP para correção manual.
- A sinalização no módulo já existe (status Pendência com motivo). A notificação por e-mail é Parte 2.
Alteração a menos de 2 dias úteis do vencimento
A reserva permanece na DUP vigente e o crédito entra automaticamente como linha de reembolso na próxima pré-DUP.
- A retirada decide sozinha entre RN-10 e RN-22 pela distância em dias úteis até o vencimento.
- A linha de reembolso nasce com os mesmos dados de identificação da reserva original e valor negativo.
Vencimento não muda
Atualização nunca altera o vencimento, já ajustado ao dia útil pela RN-07. Prorrogação é exceção manual, por alçada.
- O recálculo preserva o vencimento original da DUP e registra a nova versão.
Cancelamento depois do pagamento
Cancelamento após a DUP paga gera linha de reembolso (valor negativo) na próxima pré-DUP, com os mesmos dados da reserva original.
- O módulo aceita linhas de reembolso com emissão de períodos anteriores, como as três linhas de setembro que entraram na DUP de 22/10 na DUP118333.
- O destino de uma DUP com saldo líquido negativo (carregar crédito ou virar duplicata a pagar) é a decisão D8.
DUP · Alçada e trilha
Alçada das alterações
Incluir, retirar ou editar reservas de uma DUP, reemitir e reenviar é exclusivo de usuários internos Mobility com alçada. Nenhum usuário externo altera DUP.
- A tela Faturamento só aceita ações de usuários autenticados no painel; o perfil Leitor apenas consulta.
- Toda ação de alçada grava o e-mail de quem executou no log da DUP.
Reserva em contestação
Reserva em contestação (SAC ou pendência com locadora) é retirada da DUP e segue a RN-10.
- A retirada exige motivo, que fica no log e na linha recriada no lote seguinte.
Edição manual segue o mesmo tratamento
Parte 2Toda edição manual usa o tratamento da RN-20 (baixa e novo boleto, mesmo número, e-mail de atualização) e o módulo tem botão de reenvio do kit.
- Depende do boleto e do envio do kit: Parte 2. O controle de versão da DUP já está pronto para suportar o reenvio.
Log imutável da DUP
ParcialToda ação na DUP fica registrada: quem (robô ou usuário), o quê, data e hora, valor antes e depois.
- O histórico fica no próprio registro da DUP, em texto corrido, apenas por acréscimo, e nas tabelas de auditoria.
- Cada chamada às rotas de faturamento também entra em Acessos à API, com IP, país, retorno e duração, visível na tela Logs.
- O CPF do usuário ainda não é coletado no cadastro do painel: hoje o log identifica por e-mail.
Trilha de cobrança
ParcialPor DUP: envio e destinatários, liberador, aberturas do link com data, hora e IP, downloads e data da baixa. Serve de prova.
- A trilha de envio e de abertura do link depende do kit e do e-mail: Parte 2. O liberador e a baixa já ficam registrados.
DUP · Cobrança
Lembrete antes do vencimento
Parte 2Lembrete amigável ao cliente 3 dias úteis antes do vencimento, com o link do kit.
- Parte 2. O prazo já está em FAT_LEMBRETE_DIAS_UTEIS (padrão 3) e a rotina diária é o lugar do disparo.
Aviso de atraso
Parte 2DUP não quitada 1 dia útil após o vencimento gera aviso ao cliente e ao Financeiro Mobility.
- Parte 2. O prazo está em FAT_AVISO_ATRASO_DIAS_UTEIS (padrão 1).
- Pode usar a régua nativa da Omie, desde que o aviso inclua o link do kit.
Faturamento B2B (DUP)
Módulo que substitui a duplicata do WOOFFICE. As regras RN-01 a RN-31 estão acima, por tema; aqui ficam os controles de integridade e os pontos em aberto do guia da Mobility, com a situação de cada um no sistema.
Como o lote é montado
| Calendário | Emissões de | Fechamento e envio | Vencimento |
|---|---|---|---|
| Padrão (decendial) | dia 02 ao dia 11 | dia 12 | dia 22 |
| Padrão (decendial) | dia 12 ao dia 21 | dia 22 | dia 02 do mês seguinte |
| Padrão (decendial) | dia 22 ao dia 01 do mês seguinte | dia 02 | dia 12 |
| Quinzenal (exceção) | dia 01 ao dia 15 | dia 16 | último dia do mês |
| Quinzenal (exceção) | dia 16 ao último dia do mês | dia 01 do mês seguinte | dia 15 do mês seguinte |
Fechamento, envio e vencimento que caiam em fim de semana ou feriado passam para o próximo dia útil, sem mudar a janela de emissões (RN-07). O lote é escolhido pela data de emissão da reserva, nunca pelo check-in (RN-06).
Fórmula do líquido
Pacote
Líquido = Tarifa BRL + Encargo + Taxa de serviço
− Comissão − Crédito reemissão − Desconto + MultaA plataforma é a fonte do valor. A conferência aceita diferença de até R$ 0,02 (FAT_TOLERANCIA_CENTAVOS), a maior divergência de arredondamento observada na DUP118333. Acima disso a linha reprova no corte (RN-11).
Reembolso_Pacote
Líquido = − Tarifa BRL × (1 − retenção) retenção = 2,1% (FAT_RETENCAO_REEMBOLSO_PCT)
Retenção observada nas três linhas de reembolso da DUP118333, com encargo, taxa e comissão zerados. Os sinais e a regra definitiva são a decisão D7.
Controles de integridade
| # | Controle | Regra verificada | Quando | Se falhar | No sistema |
|---|---|---|---|---|---|
| C1 | Cobertura | Toda reserva Faturado ativa na plataforma está em exatamente uma DUP, com contagem e valor batendo por cliente. | Diário e no corte | Alerta com as reservas órfãs e inclusão na pré-DUP aberta | Depende de terceiros Exige a lista de reservas Faturado ativas na plataforma. Hoje o orquestrador só conhece as reservas que recebeu. |
| C2 | Unicidade | Nenhuma reserva cobrada em duas DUPs; comissão sempre abatida na linha; reembolso referencia a reserva original. | Em cada inclusão e na conciliação | Bloqueia a inclusão | Implementado |
| C3 | Valor | Soma dos líquidos das linhas = valor da DUP (e, na Parte 2, título na Omie e boleto registrado). | No corte e em cada atualização | DUP vai para pendências (RN-13), sem envio | Implementado A comparação com o título da Omie e com o boleto entra na Parte 2. |
| C4 | Registro | Toda DUP emitida tem título a receber na Omie e boleto ou Pix ativo no banco. | D+1 do corte | Alerta ao Faturamento | Parte 2 |
| C5 | Cancelamentos | Toda reserva cancelada que estava em DUP recebeu tratamento: saída da pré-DUP, atualização ou reembolso na próxima. | Diário | Alerta com a reserva e a DUP | Depende de terceiros Exige o evento de cancelamento da plataforma. |
| C6 | Fechamento | No dia seguinte ao corte não existe pré-DUP do período anterior em aberto. | D+1 do corte | Alerta e fechamento manual | Implementado |
| C7 | Envio | Toda DUP emitida tem envio registrado para ao menos um e-mail de cobrança. | No envio | DUP vai para pendências | Parte 2 |
| C8 | Leitura | Link do kit aberto pelo cliente até 5 dias úteis antes do vencimento. | Diário | Alerta interno para contato ativo | Parte 2 Marcado como a decidir no guia. |
| C9 | Pendências | Nenhuma DUP na fila de pendências há mais de 1 dia útil. | Diário | Escalação ao gestor financeiro | Implementado A escalação por e-mail entra com a régua de avisos, na Parte 2. |
| C10 | Virada do WOOFFICE | No go-live, toda reserva Faturado emitida no WOOFFICE e ainda não faturada entra na pré-DUP correta, e as DUPs em aberto do legado existem como título na Omie. | Uma vez, na migração | Bloqueia o desligamento do WOOFFICE | Depende de terceiros Depende da extração do WOOFFICE. A rota de inclusão de linha já serve de porta de entrada para a carga. |
A rota de conciliação executa C2, C3, C6 e C9 e revalida o líquido de cada linha. Os demais dependem de dados que ainda não chegam ao orquestrador ou fazem parte da Parte 2.
Pontos em aberto do guia
| # | Ponto | Opções | Quem responde | Como está no sistema |
|---|---|---|---|---|
| D1 | Onde vivem limite de crédito e bloqueio | Plataforma, módulo IAXYS ou Omie. Em qualquer caso a baixa da Omie precisa retornar automaticamente | IAXYS + Financeiro | Implementado no módulo IAXYS, com rota de consulta para a plataforma. Reversível. |
| D2 | Onde vivem calendário por cliente e pré-DUP | Plataforma, módulo IAXYS ou Omie | IAXYS + Financeiro | Implementado no módulo IAXYS, para não acoplar à plataforma de reservas. |
| D3 | Onde vive o cadastro de e-mails de cobrança e como migrar do WOOFFICE | Omie (tem o campo) ou módulo IAXYS; carga em lote a partir de extração do WOOFFICE | IAXYS + Financeiro | Campo criado no cadastro de Clientes B2B do módulo. Aguarda a extração do WOOFFICE. |
| D4 | Viabilidade do Plano A (RN-20) | Baixa e novo registro via API Itaú/Omie | IAXYS | Em análise na Parte 2. O recálculo com mesmo número e versão já está pronto. |
| D5 | Calendário quinzenal | Lista dos clientes com calendário próprio | Financeiro | Decendial e quinzenal implementados. Falta a lista de clientes por calendário. |
| D6 | Validade do link do kit | Prazo em dias (a senha já é definida: 8 primeiros dígitos do CNPJ) | Financeiro + IAXYS | Configuração FAT_VALIDADE_LINK_DIAS criada com 90 dias como provisório. |
| D7 | Fórmula completa do líquido | Sinais de crédito de reemissão, desconto e multa; regra do reembolso; arredondamento | Financeiro | Implementada a hipótese da memória de cálculo: crédito e desconto subtraem, multa soma, reembolso retém 2,1%. Precisa de confirmação. |
| D8 | DUP com saldo líquido negativo | Crédito carrega para a próxima ou vira duplicata a pagar | Financeiro | Hoje o saldo negativo fica na DUP e aparece na conciliação. Nenhum tratamento automático. |
| D9 | Numeração da DUP | Nova série com prefixo FAT ou continuidade do legado DUP do WOOFFICE | Financeiro + IAXYS | Implementado FAT1001 em diante, conforme a preferência do Financeiro, com prefixo e número inicial configuráveis. |
| D10 | Janela do processamento em lote | Horário noturno a decidir | IAXYS | Rotina diária às 6h UTC, com fechamento automático desligado por padrão. |
| D11 | Calendário de feriados | Fonte e manutenção da lista usada na regra de dia útil | Financeiro + IAXYS | Tabela Feriados criada no banco de dados, com carga manual. Fonte oficial a definir. |
| D12 | Omie: mapeamento de campos | Cliente, categoria, conta corrente e centro de custo | Financeiro + IAXYS | Aguarda a lista em Excel do Financeiro. O módulo já lê esse mapeamento das Configurações. |
Comissões B2B (COM)
Módulo que substitui o aviso de comissão do Woofice (guia COM Parte 2, v3). Comissão não netada entra no estoque, o AV vai ao cliente, as NFs são conferidas por locadora e a COM vira título a pagar na Omie. Tela em /comissoes.
Ciclo da comissão
Bloqueada ──(baixa da comissão da locadora)──▶ Disponível Disponível ──(COM liberada pelo Gerente)──▶ Em COM ──(liquidação na Omie)──▶ Paga Em COM ──(COM cancelada antes da remessa)──▶ Disponível Paga ──(devolução bancária + Gerente)──▶ Em COM Bloqueada/Disponível ──(reserva cancelada)──▶ Cancelada
O AV só lê comissões Disponíveis e não muda status (RC-13). Reserva cancelada com comissão Em COM ou Paga gera estorno negativo, Bloqueado enquanto a original estiver Em COM (RC-08), que entra compulsoriamente no próximo AV e na próxima COM (RC-09).
Valor da COM
COM = Σ comissões + Σ ajustes − Σ estornos NF da locadora confere com Σ linhas do tipo Comissão da locadora |NF − subtotal| ≤ COM_TOLERANCIA_NF
A NF confere, não define o valor: o título na Omie sai sempre pelo valor das linhas (RC-18, C4). Saldo zero ou negativo não gera COM (D6, provisório). Vencimento em COM_PRAZO_DIAS_UTEIS dias úteis da liberação final (RC-22).
Regras RC no sistema
| Regra | Tema | O que garante | Situação |
|---|---|---|---|
| RC-01 | Fato gerador | Comissão gerada pela plataforma; o módulo não recalcula. Entra pela importação da venda (valores.comissao.repassada) ou por POST /comissoes. | Implementada |
| RC-02 | Fato gerador | Só entra no estoque a comissão não netada; indicador explícito por reserva. Aceita netada, valorAbatido (netagem parcial) ou pagamentos[].descontarComissao; vazio vai para pendências (D1). | Parcial |
| RC-03 | Fato gerador | Pré-paga liberada na emissão; pagamento no local bloqueada até a baixa da comissão da locadora. Liberação por evento liberacao-local ou pela tela; gatilho automático depende do D5. | Parcial |
| RC-04 | Fato gerador | Chave única: ID + File + LOC + tipo + versão; segunda linha igual vai para pendências. Chave conferida sob trava do cliente antes de cada inclusão. Campo componente opcional para a reserva com duas comissões (caso 387776). | Implementada |
| RC-05 | Status | Cinco estados e só as transições do guia. | Implementada |
| RC-06 | Status | Em COM e Paga não entram em AV nem em outra COM. | Implementada |
| RC-07 | Cancelamentos | Cancelada com comissão Bloqueada/Disponível: Cancelada, sem estorno. | Implementada |
| RC-08 | Cancelamentos | Em COM/Paga: estorno (Bloqueado até a original ser paga); alteração gera estorno + nova versão. | Implementada |
| RC-09 | Cancelamentos | Estornos entram compulsoriamente no próximo AV e na próxima COM. | Implementada |
| RC-10 | Cancelamentos | Saldo líquido zero ou negativo. Provisório: não gera COM e o saldo segue no estoque (D6). | A decidir |
| RC-37 | Cancelamentos | Estorno sem par e anulação de par (casos 1, 2 e 3). | Implementada |
| RC-11 | AV | Gerado por Operador ou Gerente, enviado por e-mail da caixa comissoes@. Modo manual (download e confirmação) ou disparo pelo sistema via webhook de e-mail (D2). | Parcial |
| RC-12 | AV | Filtro por CNPJ e período (emissão ou liberação); comissões fora do período só na tela. | Implementada |
| RC-13 | AV | AV não reserva comissões; aviso de AV aberto em comum. | Implementada |
| RC-14 | AV | Numeração sequencial; COM herda o número do AV. Prefixos COM_PREFIXO_AV e COM_PREFIXO_COM (D8). | Implementada |
| RC-15 | AV | Incluir/excluir linhas; estorno não sai. | Implementada |
| RC-16 | AV | AV identificado como relatório prévio, com prazo estimado. | Implementada |
| RC-17 | AV | Cancelamento do AV enquanto não virou COM. | Implementada |
| RC-35 | AV | Pré-validação do cadastro na Omie; sem cadastro, rascunho bloqueado. Tipo de conta não existe no cadastro da Omie; validar em homologação. | Implementada |
| RC-36 | AV | AV substituto, notificação e AV de aproveitamento. | Implementada |
| RC-18 | COM | Valor = comissões + ajustes − estornos; NF confere, não define o valor. | Implementada |
| RC-19 | COM | Conferência humana NF × subtotal por locadora, com tolerância. Tolerância provisória R$ 0,10 por NF (D4). | Implementada |
| RC-20 | COM | NFs (PDF e XML) registradas no AV e levadas à COM. Leitura automática do XML de NFS-e no padrão nacional e de NF-e. | Implementada |
| RC-21 | COM | Geração atômica; invalida AVs abertos com comissão em comum. Trava por cliente e gravação só no fim da operação: se uma regra recusar, nada é gravado. | Implementada |
| RC-22 | COM | Vencimento D+10 dias úteis da liberação final; Gerente altera com motivo. Calendário de feriados compartilhado com a DUP (D3). | Implementada |
| RC-23 | COM | Dados bancários lidos da Omie; reemissão com novos dados antes da remessa. | Implementada |
| RC-24 | COM | COM imutável; correção só cancelando. | Implementada |
| RC-25 | COM | Cancelamento por Gerente até a remessa bancária. A API da Omie não informa a remessa de forma confiável: marcação pela tesouraria e leitura do status na sincronização. | Parcial |
| RC-26 | COM | Liquidação na Omie muda para Paga; liquidação composta soma as baixas. | Implementada |
| RC-38 | COM | Pagamento devolvido: alerta, Paga → Em COM com Gerente, caminhos 1 e 2. | Implementada |
| RC-39 | COM | DUP vencida exige decisão do Gerente (pagar ou compensar). | Implementada |
| RC-27 | Envio | AV e COM por e-mail com PDF e Excel anexados. | Implementada |
| RC-28 | Envio | Texto editável com variáveis. COM_EMAIL_TEXTO_AV e COM_EMAIL_TEXTO_COM. | Implementada |
| RC-29 | Envio | Destinatário solicitante, cópia interna, remetente caixa compartilhada. Disparo em nome da caixa depende do provedor de e-mail (D2). | Parcial |
| RC-30 | Auditoria | Log imutável de documentos, aprovações, vencimentos e consultas à DUP. Tabela só de acréscimo (UPDATE e DELETE bloqueados no banco). | Implementada |
| RC-31 | Auditoria | Histórico por comissão (AVs, COMs, pagamento, estorno). | Implementada |
| RC-32 | Perfis | Operador e Gerente; só Gerente libera COM. Listas COM_GERENTES, COM_OPERADORES e COM_DIRETORIA. | Implementada |
| RC-33 | Perfis | Segunda aprovação acima da alçada. Limite provisório R$ 50.000 (D14). | Implementada |
| RC-34 | Perfis | Segregação entre liberar COM, aprovar pagamento e alterar banco. No módulo: bloqueio; na Omie: controle de detecção (a API não permite bloqueio preventivo). | Parcial |
| RC-40 | Gestão | Estoque, aging, COMs abertas, previsão de caixa e conciliação, em tela e Excel. Conciliação com o razão depende da conta definida no D10. | Implementada |
Controles de integridade (C1 a C13)
| # | Controle | Regra verificada | Quando | No sistema |
|---|---|---|---|---|
| C1 | Unicidade | Nenhuma comissão em duas COMs ativas; uma positiva ativa por chave. | Em cada inclusão, na COM e diário | Implementado |
| C2 | "Netagem" | Nenhuma comissão netada no estoque. | Na entrada e diário | Depende de terceiros Depende do indicador D1; reserva identificada como netada sai do estoque ou alerta se já estiver Em COM/Paga. |
| C3 | Cobertura | Toda reserva não netada tem comissão; sem indicador vai para pendências. | Diário | Depende de terceiros Lado do módulo (pendências) implementado; contagem contra a plataforma depende da exportação da Fase 0. |
| C4 | Valor | Linhas = COM = título = liquidado. | Na geração e na liquidação | Implementado |
| C5 | Status | Paga se e somente se o título está liquidado. | Diário | Implementado |
| C6 | Estornos | Cancelada/alterada com comissão Em COM ou Paga tem estorno. | Diário | Implementado |
| C7 | Liberação no local | Bloqueada há mais de 30 dias. | Diário | Depende de terceiros Liberação automática depende do D5. |
| C8 | Estorno parado | Estorno Disponível há mais de N dias. | Diário | Implementado COM_DIAS_ESTORNO_PARADO (D16). |
| C9 | Pendências | AV em rascunho, COM aguardando aprovação, título com erro. | Diário | Implementado |
| C10 | Virada do Woofice | Migração confere com o legado e o razão. | Na virada | Depende de terceiros Rota de migração pronta; critérios no D17. |
| C11 | Conciliação contábil | Disponível + Em COM = passivo de comissões. | Diário e mensal | Depende de terceiros Base do passivo pronta no relatório; o saldo contábil vem da contabilidade (D10). |
| C12 | Envelhecimento | Disponível sem AV há mais de N dias; fora do período no AV. | Diário | Implementado |
| C13 | Inadimplência na DUP | COM aberta sem decisão sobre DUP vencida. | Diário até a remessa | Implementado Bloqueio da remessa na Omie não é possível pela API: alerta. |
Pontos em aberto (D1 a D17)
| # | Ponto | Quem responde | Como está no sistema |
|---|---|---|---|
| D1 | Indicador de netagem | TI Mobility + IAXYS | Aceita netada, valorAbatido e descontarComissao; vazio vai para pendências. |
| D2 | Envio de AV e COM | Financeiro + IAXYS | Os dois modos prontos (COM_EMAIL_MODO); falta o provedor de e-mail da caixa comissoes@. |
| D3 | Calendário de feriados | Financeiro | Usa a tabela Feriados da DUP. |
| D4 | Tolerância da NF | Financeiro | R$ 0,10 provisório (COM_TOLERANCIA_NF). |
| D5 | Gatilho da liberação no local | Financeiro + IAXYS | Evento liberacao-local (aceita lote por extrato) e liberação pela tela. |
| D6 | Saldo zero ou negativo | Financeiro | Provisório: não gera COM e o saldo segue para a próxima rodada. |
| D7 | Troca de dados bancários | Financeiro | Bloqueia conta fora do CNPJ do cliente; a troca em si continua na Omie. |
| D8 | Numeração e prefixo | Financeiro + IAXYS | Configurável (COM_PREFIXO_AV, COM_PREFIXO_COM, COM_NUMERO_INICIAL). |
| D9 | Cadência e autosserviço | Financeiro + Comercial | Fase 5. |
| D10 | Mapeamento na Omie e contabilização | Financeiro + IAXYS + contabilidade | Campos COM_OMIE_CATEGORIA, COM_OMIE_CONTA_CORRENTE e COM_OMIE_CONTA_COMPENSACAO; falta a planilha. |
| D11 | Retenções e questões fiscais | Contabilidade | Sem retenção no título; aguarda a contabilidade. |
| D12 | Tripla conferência e unicidade da NF | Financeiro + IAXYS | Implementado como bloqueio na conferência; XML sinalizado quando ausente. |
| D13 | Prazo e base contratual | Jurídico + Financeiro | COM_PRAZO_DIAS_UTEIS = 10. |
| D14 | Parâmetros de alçada e prazos | Diretoria Financeira | Provisórios: alçada R$ 50.000, envelhecimento 90 dias, pagabilidade desligada. |
| D15 | Histórico de estornos | TI Mobility + Financeiro | Aguardando a exportação. |
| D16 | Parâmetros de C8 e C9 | Financeiro | 60 dias e 1 dia útil, configuráveis. |
| D17 | Virada do Woofice | Financeiro + IAXYS + TI Mobility | COM_CPA_POR_VENDA permite rodar em sombra; desligar na virada. |
Persistência: banco de dados da página Mobility, bases Comissões B2B (estoque), Avisos e duplicatas de comissão, Pendências de comissão, Anexos de comissão, Log de comissões (só acréscimo) e Travas de comissão. Cada operação roda sob trava do cliente e só grava no fim: se uma regra recusar, nada é gravado. As categorias da Omie ficam na base Categorias Omie.
Códigos de integração
Todo registro criado na Omie leva um código de integração previsível. É ele que garante a idempotência e liga os eventos da Omie ao File.
| Registro | Campo Omie | Formato | Exemplo |
|---|---|---|---|
| Cliente | codigo_cliente_integracao | MOB-{cliente} | MOB-1518 |
| Ordem de Serviço | cCodIntOS | MOB-{empresa}-{filial}-{file}-{CodigoWooMobil} | MOB-29-26-00341130-341130 |
| Conta a receber | codigo_lancamento_integracao | MOB-{file}-CRE-{CodigoWooMobil}-R{n}-P{parcela} | MOB-00341183-CRE-341183-R1-P2 |
| Conta a pagar | codigo_lancamento_integracao | MOB-{file}-CPA-{CodigoWooMobil}-{n} | MOB-00341185-CPA-341186-1 |
Domínios e prazos
Legendas das tabelas turFormaRecebimento e turFormaPagamento do WOOFFICE. Os prazos vêm da tabela Formas de recebimento e pagamento do banco de dados e definem o vencimento dos títulos.
| FormaRecebimento | Legenda | Prazo |
|---|---|---|
| 1 | INV | 0 dias |
| 2 | CASH | 0 dias |
| 3 | FATURADO | 30 dias |
| 4 | CC | 30 dias |
| 5 | GR | 0 dias |
| 6 | TKT | 0 dias |
| 7 | MTP | 0 dias |
| 8 | CARTAO_CORPORATIVO | 30 dias |
| 9 | CONTRA_APRESENTACAO | 0 dias |
| 10 | CHEQUE | 0 dias |
| 11 | CARTAODEBITO | 0 dias |
| 12 | MCO | 0 dias |
| 13 | VENDAFINANCIADA | 0 dias |
| 14 | SEMCOBRANCA | 0 dias |
| 15 | DESPESAINTERNA | 0 dias |
| 16 | CARTAO_PROPRIO | 0 dias |
| 17 | BOLETO | 7 dias |
| 18 | LOCAL | 0 dias |
| 19 | DEPOSITO | 0 dias |
| 20 | Poupanca_Programada | 0 dias |
| 21 | MoedaConversao | 0 dias |
| 22 | CartaDeCredito | 0 dias |
| 23 | NOTA DE CREDITO | 0 dias |
| 24 | FATURADO + CARTAO | 30 dias |
| 25 | PIX | 0 dias |
| 27 | PIX RECEBIDO | 0 dias |
| 29 | Link de Pagamento | 0 dias |
| FormaPagamento | Legenda | Prazo |
|---|---|---|
| 1 | INV | 30 dias |
| 2 | CASH | 30 dias |
| 3 | FATURADO | 30 dias |
| 4 | CC | 30 dias |
| 5 | GR | 30 dias |
| 6 | TKT | 30 dias |
| 7 | MTP | 30 dias |
| 8 | CARTAO_CORPORATIVO | 30 dias |
| 9 | CONTRA_APRESENTACAO | 30 dias |
| 10 | CHEQUE | 30 dias |
| 11 | CARTAODEBITO | 30 dias |
| 12 | MCO | 30 dias |
| 13 | VENDAFINANCIADA | 30 dias |
| 14 | SEMCOBRANCA | 30 dias |
Webhooks
Dois sentidos: a Omie avisa o orquestrador, e o orquestrador avisa a Mobility.
Cadastro na Omie
- Acesse developer.omie.com.br com um usuário administrador da conta da Mobility.
- Abra Aplicativos, escolha o app da integração e clique em Adicionar novo webhook.
- Informe a URL
https://mobility.iaxys.com.br/api/omie/webhook, sem parâmetros. A autenticidade é conferida pelo appKey que a Omie envia em cada evento. - Marque os tópicos abaixo e salve. A Omie envia uma notificação de teste.
Os nomes de Ordem de Serviço e Cliente/Fornecedor devem ser conferidos na lista do painel da Omie ao cadastrar.
Entrega para a Mobility
POST na URL informada pela Mobility, com os headers X-Iaxys-Event, X-Iaxys-Delivery e X-Iaxys-Signature. Responda 2xx para confirmar.
{
"id": "omie-9a1f…",
"tipo": "omie.evento",
"emitidoEm": "2026-09-11T14:00:00Z",
"origem": "iaxys-orquestrador",
"dados": {
"idEvento": "omie-9a1f…",
"topico": "Financas.ContaReceber.BaixaRealizada",
"file": "00341130",
"evento": {
"codigo_lancamento_integracao": "MOB-00341130-CRE-341130-R1-P1",
"valor_documento": 117.39
}
}
}Validação da assinatura
// Node.js — validar o callback da IAXYS
import { createHmac, timingSafeEqual } from 'node:crypto'
function assinaturaValida(corpoBruto, assinatura, segredo) {
const esperado = createHmac('sha256', segredo).update(corpoBruto).digest('hex')
return assinatura?.length === esperado.length &&
timingSafeEqual(Buffer.from(assinatura), Buffer.from(esperado))
}
// header: X-Iaxys-SignatureConector MCP (consulta por assistente de IA)
O time da Mobility conecta o próprio assistente — Claude, ChatGPT ou Gemini — e pergunta sobre a operação em linguagem natural. Só leitura, com a credencial de API de cada time e tudo auditado.
Endereço
https://mobility.iaxys.com.br/api/mcp
Transporte HTTP streamable (JSON-RPC 2.0 em POST). Sem sessão, sem estado.
Autenticação
X-Api-Key: mob_... ou Authorization: Bearer mob_...
A mesma credencial da tela Credenciais. Credencial somente leitura já atende o conector inteiro.
O que não sai daqui
Nenhuma informação de arquitetura: sem nome de banco, tabela, variável de ambiente, biblioteca, provedor ou caminho de arquivo, e sem mensagem interna de erro. Só número operacional e contrato de API.
| Ferramenta | O que responde |
|---|---|
| resumo_operacao | Quantos itens o orquestrador processou: reservas recebidas e integradas, reservas com erro, ordens de serviço e títulos financeiros criados, eventos recebidos da Omie. Aceita uma janela em dias (padrão 7). |
| consultar_reserva | Situação consolidada de um File: localizadores, etapas concluídas na Omie (cliente, ordem de serviço, títulos a receber e a pagar), entrada na duplicata B2B quando faturada, erros em linguagem de negócio e horários. |
| listar_rotas | Catálogo das rotas da API do orquestrador: método, caminho, para que serve, que autenticação exige, qual chamada do sistema antigo ela substitui e quais regras de negócio a compõem. Pode filtrar por grupo. |
| descrever_rota | Contrato completo de uma rota: descrição funcional, parâmetros, corpo esperado, respostas possíveis com o significado de cada código e as regras de negócio aplicadas. Aceita o id ou o caminho da rota. |
| listar_regras | Regras de negócio da integração e do faturamento B2B, com a situação de cada uma (implementada, parcial, prevista para a próxima fase). Pode filtrar por seção ou pedir uma regra específica. |
| listar_integracoes | Integrações que o orquestrador oferece e o estado de cada uma: entrada de vendas, consultas, webhooks da Omie com os tópicos a cadastrar, retorno de eventos para a Mobility, cotação de câmbio, faturamento B2B e reprocessamento automático. |
| resumo_faturamento | Situação das duplicatas: quantidade e valor por situação, lotes em formação, pendências com motivo e próximos vencimentos. Com um CNPJ, devolve o limite de crédito do cliente e o que o bloqueia. |
| indicadores_api | Uso da API por rota numa janela de dias: chamadas, taxa de sucesso, rejeições, erros e tempo médio de resposta. Números agregados, sem identificar quem chamou. |
Claude
Claude Code, Claude Desktop ou claude.ai.
claude mcp add --transport http mobility https://mobility.iaxys.com.br/api/mcp --header "X-Api-Key: mob_..."
ChatGPT
Conector personalizado (modo desenvolvedor) ou ponte local.
npx -y mcp-remote https://mobility.iaxys.com.br/api/mcp --header "X-Api-Key: mob_..."
Gemini
Gemini CLI, em settings.json.
"mobility": {
"httpUrl": "https://mobility.iaxys.com.br/api/mcp",
"headers": { "X-Api-Key": "mob_..." }
}O passo a passo completo, com o que fazer em cada ferramenta e exemplos de pergunta, está no arquivo
docs/conector-mcp-mobility.mddo repositório. Revogar a credencial na tela Credenciais corta o acesso do assistente em até um minuto, e cada consulta aparece na tela Logs.
Banco de dados e configurações
O orquestrador guarda registros e parâmetros de negócio em banco de dados próprio. Os parâmetros são editados pela aba Configurações do painel, sem novo deploy.
- ConfiguraçõesParâmetros de negócio: categorias, conta corrente, serviço, prazos, tentativas e URL de callback.
- Formas de recebimento e pagamentoLegenda e prazo de vencimento de cada código do WOOFFICE.
- Vendas recebidasUma linha por reserva, com status, payload e resultado na Omie.
- Eventos OmieEventos recebidos pelo webhook e o estado da entrega para a Mobility.
- Log de integraçãoTrilha de auditoria de cada etapa e de cada alteração de configuração.
- Acessos à APIQuem chamou cada rota, de qual IP e país, com horário, retorno e duração (tela Logs).
- CotaçõesCache das cotações PTAX consultadas.
- UsuáriosQuem acessa o painel de testes e com qual perfil.
- Credenciais de APIChaves criadas pelos usuários: prefixo, hash, escopo, validade e uso.
- Clientes B2B (faturamento)Limite de crédito, calendário de corte, forma de cobrança e e-mails de cobrança.
- Duplicatas (DUP)Pré-DUPs e DUPs emitidas, com período, vencimento, valor e pendências.
- Linhas da DUPUma linha por reserva faturada ou reembolso, com todos os campos do Excel da Mobility.
- FeriadosDatas usadas na regra de dia útil do calendário de corte.
- Comissões B2B (estoque)Uma linha por comissão, estorno ou ajuste, com status, valor, reserva e COM vinculada.
- Avisos e duplicatas de comissão (AV/COM)AVs e COMs com status, NFs, conferência, título na Omie, baixas e notificações.
- Pendências de comissãoRegistros da plataforma que não viraram comissão (netagem vazia, chave duplicada, dado ausente).
- Anexos de comissão (NFs)PDF e XML das notas fiscais registradas nos AVs.
- Log de comissõesTrilha imutável de cada ação em comissões, AVs e COMs (RC-30).
- Travas de comissãoControle de concorrência: uma operação por cliente por vez.
- Categorias OmiePlano de categorias da Omie da Mobility e o uso de cada uma no orquestrador.
| Chave (tabela Configurações) | Grupo | Uso |
|---|---|---|
| OMIE_COD_SERVICO_LOCACAO * | Omie | nCodServ do serviço de locação usado nos itens da OS. |
| OMIE_CATEG_RECEITA * | Omie | Categoria dos títulos a receber e da OS. |
| OMIE_CATEG_COMISSAO | Omie | Categoria da comissão repassada. |
| OMIE_CATEG_REEMBOLSO | Omie | Categoria do reembolso ao cliente. |
| OMIE_CATEG_DESPESA | Omie | Categoria dos demais pagamentos. |
| OMIE_CONTA_CORRENTE * | Omie | nCodCC da conta corrente padrão. |
| OMIE_CRIAR_OS | Omie | Cria uma OS por reserva. |
| OMIE_ETAPA_OS | Omie | Etapa inicial da OS. |
| PRAZO_PAGAMENTO_DIAS | Prazos | Vencimento padrão de títulos a pagar. |
| INTERVALO_PARCELAS_DIAS | Prazos | Dias entre parcelas. |
| RETRY_MINUTOS | Integração | Espera antes de reprocessar. |
| MAX_TENTATIVAS | Integração | Tentativas antes de ERRO. |
| MOBILITY_WEBHOOK_URL | Callback | URL de callback da Mobility. |
| AUDITORIA_ATIVA | Integração | Registra cada chamada à API na trilha de auditoria (tela Logs). |
| AUDITORIA_IGNORAR_HEALTH | Integração | Não registra as chamadas de /health (monitoramento). |
| AUDITORIA_GUARDAR_IP | Integração | Guarda o IP inteiro; false mascara o último bloco. |
| FAT_PREFIXO_NUMERO | Faturamento | Prefixo da numeração das duplicatas (ponto D9 do guia). |
| FAT_NUMERO_INICIAL | Faturamento | Primeiro número da série nova. |
| FAT_CALENDARIO_PADRAO | Faturamento | Calendário usado quando o cliente não tem um próprio (RN-07). |
| FAT_ALERTA_LIMITE_PCT | Faturamento | Percentual do limite que dispara alerta ao cliente e ao Financeiro (RN-05). |
| FAT_BLOQUEIO_DIAS_UTEIS | Faturamento | Dias úteis de atraso que bloqueiam novas emissões no Faturado (RN-03). |
| FAT_RETENCAO_REEMBOLSO_PCT | Faturamento | Retenção aplicada ao reembolso, provisória até a definição do ponto D7. |
| FAT_TOLERANCIA_CENTAVOS | Faturamento | Diferença aceita entre o líquido da plataforma e o recalculado (seção 5.3). |
| FAT_LEMBRETE_DIAS_UTEIS | Faturamento | Dias úteis antes do vencimento para o lembrete amigável (RN-30). |
| FAT_AVISO_ATRASO_DIAS_UTEIS | Faturamento | Dias úteis após o vencimento para o aviso de atraso (RN-31). |
| FAT_VALIDADE_LINK_DIAS | Faturamento | Validade do link do kit de faturamento, provisória até o ponto D6. |
| FAT_CORTE_AUTOMATICO | Faturamento | Fecha as pré-DUPs vencidas na rotina automática (RN-14). Comece em false para conferência manual. |
| COM_INGESTAO_ATIVA | Comissões | A venda importada alimenta o estoque de comissões B2B (RC-01, RC-02). |
| COM_CPA_POR_VENDA | Comissões | Mantém o título a pagar de comissão por venda (legado). Na virada do Woofice deve ir para false: a comissão passa a ser paga só pela COM, sem duplicidade (parecer 2.1). |
| COM_PREFIXO_AV | Comissões | Prefixo do aviso de comissão (RC-14). |
| COM_PREFIXO_COM | Comissões | Prefixo da duplicata de comissão; CAV se o ponto D8 for aprovado. |
| COM_NUMERO_INICIAL | Comissões | Primeiro número da série AV/COM. Com prefixo COM, deve ficar acima do último número do legado (D8). |
| COM_PRAZO_DIAS_UTEIS | Comissões | Vencimento padrão da COM em dias úteis após a liberação final (RC-22, D13). |
| COM_TOLERANCIA_NF | Comissões | Diferença aceita entre a NF e o subtotal da locadora, em reais (RC-19, D4). Provisória. |
| COM_ALCADA_LIMITE | Comissões | COM acima deste valor exige segunda aprovação (RC-33, D14). Provisório; 0 desliga. |
| COM_GERENTES | Comissões | E-mails com perfil Gerente, separados por vírgula (RC-32). Vazio: Admin do painel atua como Gerente. |
| COM_OPERADORES | Comissões | E-mails com perfil Operador (RC-32). Vazio: Testador do painel atua como Operador. |
| COM_DIRETORIA | Comissões | E-mails da Diretoria Financeira aptos à segunda aprovação (RC-33). |
| COM_DOMINIO_USUARIOS | Comissões | Domínio exigido dos perfis (ex.: mobility.com.br). Vazio não restringe. |
| COM_OMIE_CATEGORIA | Comissões | Categoria do título da COM na Omie, contrapartida no passivo de comissões (D10). Vazio usa OMIE_CATEG_COMISSAO. |
| COM_OMIE_CONTA_CORRENTE | Comissões | Conta corrente de saída da COM (D10). Vazio usa OMIE_CONTA_CORRENTE. |
| COM_OMIE_CONTA_COMPENSACAO | Comissões | Conta usada pela tesouraria na compensação COM × DUP; baixas nela contam como compensação (RC-26, RC-39). |
| COM_OMIE_ANEXAR_NF | Comissões | Anexa as NFs ao título a pagar na Omie (seção 8.1). |
| COM_EMAIL_MODO | Comissões | manual (download e envio pela caixa compartilhada) ou webhook (disparo pelo sistema) — ponto D2. |
| COM_EMAIL_WEBHOOK_URL | Comissões | Endpoint que envia o e-mail a partir de comissoes@mobility.com.br (ex.: workflow com Gmail/Microsoft 365). |
| COM_EMAIL_REMETENTE | Comissões | Caixa compartilhada remetente (RC-11, RC-29). |
| COM_EMAIL_COPIA | Comissões | E-mail interno de registro, em cópia (RC-29). |
| COM_EMAIL_TEXTO_AV | Comissões | Texto do e-mail do AV, com variáveis {cliente} {numero} {valor} {conta} {prazo} (RC-27). |
| COM_EMAIL_TEXTO_COM | Comissões | Texto do e-mail da COM (RC-28). |
| COM_LINK_LOCADORAS | Comissões | Link da biblioteca de dados das locadoras para emissão das NFs (seção 6.1). |
| COM_DIAS_ESTORNO_PARADO | Comissões | Estorno Disponível há mais dias sem COM gera alerta (C8, D16). |
| COM_DIAS_PENDENCIA | Comissões | Dias úteis de AV em rascunho ou COM aguardando aprovação antes da escalação (C9, D16). |
| COM_DIAS_ENVELHECIMENTO | Comissões | Comissão Disponível sem AV há mais dias gera alerta (C12, D14). |
| COM_DIAS_PAGABILIDADE | Comissões | Prazo máximo, em dias desde a emissão, para pagar uma comissão; acima dele o AV avisa (RC-12, D14). Vazio desliga. |
Segredos (.env)
Só segredos e infraestrutura ficam nas variáveis de ambiente da Vercel. Nenhum valor é exibido em páginas ou respostas.
| OMIE_APP_KEY / OMIE_APP_SECRET | Credenciais do aplicativo Omie da Mobility. O appKey também autentica os webhooks. |
| MOBILITY_API_KEY | Chave que a Mobility envia em X-Api-Key. |
| MOBILITY_WEBHOOK_SECRET | Segredo do HMAC dos callbacks para a Mobility. |
| BANCO_DADOS_TOKEN | Acesso ao banco de dados do orquestrador (registros, configurações e login do painel). |
| SESSION_SECRET | Assinatura do cookie de sessão do painel. |
| CRON_SECRET | Protege a rota de reprocessamento. |
| DATABASE_URL / PERSISTENCIA | Opcional. PostgreSQL para alto volume; PERSISTENCIA força banco_dados, postgres ou memoria. |
Pendências de definição
Pontos que dependem da Mobility. As regras correspondentes estão implementadas com um padrão provisório.
- Prazos de vencimento por forma de recebimento e pagamentoDaniel (financeiro Mobility)
- Categorias Omie definitivas a partir do de-para do plano de contasRicardo (contábil)
- Tratamento de cancelamento e abatimento de receitaAlexandre (spec técnica)
- Uso do crédito de reemissão no valor a receber da reserva vinculadaMobility
- Endpoint de callback da Mobility, ou uso de pollingAlexandre / Hugo
- Carga inicial de clientes e fornecedores com código MOB-{id}IAXYS + Mobility
- Reserva com recebimento FATURADO + CARTAO (código 24): quanto entra na DUPDaniel (financeiro Mobility)
- Lista de clientes B2B com limite, calendário, forma de cobrança e e-mails de cobrança (D3, D5)Financeiro Mobility
- Confirmação da fórmula do líquido e da regra do reembolso (D7)Financeiro Mobility