IX

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

POST/api/mobility/v1/vendasX-Api-Key

Importar 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.
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"
}
GET/api/mobility/v1/vendas/{file}X-Api-Key

Status 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

filepath · obrigatórioNúmero do File na Mobility.00341130
empresaqueryId da empresa no WOOFFICE.29
filialqueryId da filial no WOOFFICE.26

Respostas

  • 200Status consolidado e lista de reservas.
  • 404Nenhuma reserva recebida com esse File.
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": []
    }
  ]
}
GET/api/mobility/v1/vendas/{file}/creditoX-Api-Key

Consultar 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

filepath · obrigatórioNúmero do File.00341130
empresaqueryId da empresa.29
filialqueryId da filial.26
omiequery0 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.
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
    }
  ]
}
GET/api/mobility/v1/vendas/por-id/{idVenda}/creditoX-Api-Key

Consultar 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

idVendapath · obrigatórioId 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.
POST/api/mobility/v1/vendas/{file}/reprocessarX-Api-Key

Reprocessar 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

filepath · obrigatórioNúmero do File.00341130
empresaqueryId da empresa.29
filialqueryId da filial.26

Respostas

  • 200Lista das reservas reprocessadas e o novo status consolidado.
  • 404File não encontrado.
GET/api/mobility/v1/vendasX-Api-Key

Resumo 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

GET/api/mobility/v1/cotacoesX-Api-Key

Consultar 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

moedaquery · obrigatórioCódigo ISO da moeda.USD
tipoqueryTipo de produto (mantido por compatibilidade).Carro
moedaIdqueryId da moeda na plataforma da Mobility. Quando informado, volta ecoado em cada item.1
dataqueryData 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
diasqueryQuantidade 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

GET/api/mobility/v1/faturamento/limiteX-Api-Key

Limite 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

cnpjquery · obrigatórioCNPJ do cliente, com ou sem máscara.12345678000190
valorqueryValor 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.
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
    }
  ]
}
GET/api/mobility/v1/faturamento/dupsX-Api-Key

Listar 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

cnpjqueryFiltra por cliente.12345678000190
statusqueryPré-DUP, Pendência, Emitida, Enviada, Paga ou Cancelada.Pré-DUP
limitequeryQuantidade 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.
POST/api/mobility/v1/faturamento/dupsX-Api-Key

Incluir 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.
GET/api/mobility/v1/faturamento/dups/{numero}X-Api-Key

Detalhe 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

numeropath · obrigatórioNú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.
POST/api/mobility/v1/faturamento/dups/{numero}/fecharSessão ou X-Api-Key

Fechar 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

numeropath · obrigatórioNú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.
GET/api/mobility/v1/faturamento/conciliacaoX-Api-Key

Relató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.
GET/api/internal/faturamentoCron

Rotina 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

GET/api/mobility/v1/comissoesX-Api-Key

Estoque 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

cnpjqueryCNPJ do cliente B2B (só dígitos ou formatado).32549170000116
statusqueryUm ou mais status separados por vírgula.Disponível,Em COM
limitequeryMáximo de linhas (padrão 2000).

Respostas

  • 200quantidade, porStatus e comissoes.
  • 503Banco de dados do módulo de comissões não configurado.

Regras de negócio aplicadas

POST/api/mobility/v1/comissoesX-Api-Key

Registrar 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.

Regras de negócio aplicadas

POST/api/mobility/v1/comissoes/eventosX-Api-Key

Eventos 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.

Regras de negócio aplicadas

GET/api/mobility/v1/comissoes/documentosX-Api-Key

AVs 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

cnpjqueryFiltra por cliente.

Respostas

  • 200documentos com status do AV e da COM, valor e vencimento.

Regras de negócio aplicadas

GET/api/mobility/v1/comissoes/documentos/{numero}X-Api-Key

Detalhe 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

numeropath · obrigatórioNúmero do AV/COM.1001
arquivoquerypdf ou xlsx.
tipoqueryAV (padrão) ou COM.

Respostas

  • 200Documento com linhas, conferência e log, ou o arquivo.
  • 404Documento não encontrado.

Regras de negócio aplicadas

GET/api/mobility/v1/comissoes/conciliacaoX-Api-Key

Controles 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

formatoqueryxlsx para baixar a planilha.

Respostas

  • 200conciliacao e gestao.

Regras de negócio aplicadas

POST/api/mobility/v1/comissoes/legadoX-Api-Key

Migraçã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.
GET/api/internal/comissoesCron

Rotina 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).

Baixas e baixas canceladas também chegam em tempo real pelo webhook da Omie (tópicos Financas.ContaPagar.*).

Respostas

  • 200Ações por documento e resumo dos controles.

Regras de negócio aplicadas

Eventos

GET/api/mobility/v1/eventosX-Api-Key

Eventos 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

desdequeryData ISO do último evento lido.2026-09-11T00:00:00Z
limitequeryMáximo de eventos (até 500).100

Respostas

  • 200Lista de eventos e o cursor proximoDesde.

Webhooks

POST/api/omie/webhookappKey Omie

Receptor 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.

Configuração

GET/api/configuracoesSessão ou X-Api-Key

Consultar 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

recarregarquery1 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.
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)"
  ]
}
PATCH/api/configuracoesSessão ou X-Api-Key

Alterar 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.
GET/api/credenciaisSessão do painel

Minhas 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

todasquery1 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
    }
  ]
}
POST/api/credenciaisSessão do painel

Criar 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

DELETE/api/credenciaisSessão do painel

Revogar 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

idquery · obrigatórioIdentificador 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

GET/api/logsSessão do painel

Trilha 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

horasqueryPeríodo em horas a partir de agora (0 = tudo).24
desdequeryData ISO inicial (alternativa a horas).2026-10-01T00:00:00Z
atequeryData ISO final.
rotaqueryFiltra por trecho da rota./vendas
metodoqueryGET, POST ou PATCH.POST
origemqueryMobility (API key), Painel, Webhook Omie, Cron, Simulação do painel ou Desconhecida.
resultadoquerySucesso, Rejeitado, Não autorizado ou Erro.
limitequeryMá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"
    }
  ]
}
GET/api/mobility/v1/healthPública

Saú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.
GET/api/internal/retryCron

Rodada 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.

Conector MCP

POST/api/mcpX-Api-Key

Conector 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

RN01

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.
RN02

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.
RN03

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.
RN04

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

RN05

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.
RN05B

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.
RN06

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.
RN07

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.
RN08

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.
RN09

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.
RN10

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.
RN17

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

RN11

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.
RN12

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

RN13

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.
RN14

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

RN15

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.
RN16

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

RN18

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.
RN19

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.
RN20

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.
RN21

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".
RN22

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

RN-01

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.
RN-02

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.
RN-03

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.
RN-04

Baixa devolve o limite

Parcial

A 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.
RN-05

Alerta de consumo do limite

Parcial

Ao 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

RN-06

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.
RN-07

Calendário por cliente e regra de dia útil

Parcial

Decendial 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

RN-08

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.
RN-09

Tempo real

Parcial

Inclusõ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.
RN-10

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

RN-11

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.
RN-12

Fechamento sem inconsistência

Parcial

Sem 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.
RN-13

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.
RN-14

Processamento em lote fora do horário comercial

Parcial

Fechamento 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

RN-15

E-mail com link, sem anexo

Parte 2

O 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.
RN-16

Conteúdo do kit

Parcial

O 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.
RN-17

Destinatários de cobrança

Parcial

Cadastro 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.
RN-18

Modelos de e-mail editáveis

Parte 2

Assunto 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.
RN-19

Forma de cobrança por cliente

Parcial

Bolecode (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

RN-20

Recálculo com mesmo número e vencimento (Plano A)

Parcial

Alteraçã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.
RN-21

Plano B, mínimo obrigatório

Parcial

Se 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.
RN-22

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.
RN-23

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.
RN-24

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

RN-25

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.
RN-26

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.
RN-27

Edição manual segue o mesmo tratamento

Parte 2

Toda 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.
RN-28

Log imutável da DUP

Parcial

Toda 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.
RN-29

Trilha de cobrança

Parcial

Por 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

RN-30

Lembrete antes do vencimento

Parte 2

Lembrete 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.
RN-31

Aviso de atraso

Parte 2

DUP 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árioEmissões deFechamento e envioVencimento
Padrão (decendial)dia 02 ao dia 11dia 12dia 22
Padrão (decendial)dia 12 ao dia 21dia 22dia 02 do mês seguinte
Padrão (decendial)dia 22 ao dia 01 do mês seguintedia 02dia 12
Quinzenal (exceção)dia 01 ao dia 15dia 16último dia do mês
Quinzenal (exceção)dia 16 ao último dia do mêsdia 01 do mês seguintedia 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 + Multa

A 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

#ControleRegra verificadaQuandoSe falharNo sistema
C1CoberturaToda reserva Faturado ativa na plataforma está em exatamente uma DUP, com contagem e valor batendo por cliente.Diário e no corteAlerta com as reservas órfãs e inclusão na pré-DUP abertaDepende de terceiros

Exige a lista de reservas Faturado ativas na plataforma. Hoje o orquestrador só conhece as reservas que recebeu.

C2UnicidadeNenhuma reserva cobrada em duas DUPs; comissão sempre abatida na linha; reembolso referencia a reserva original.Em cada inclusão e na conciliaçãoBloqueia a inclusãoImplementado
C3ValorSoma 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çãoDUP vai para pendências (RN-13), sem envioImplementado

A comparação com o título da Omie e com o boleto entra na Parte 2.

C4RegistroToda DUP emitida tem título a receber na Omie e boleto ou Pix ativo no banco.D+1 do corteAlerta ao FaturamentoParte 2
C5CancelamentosToda reserva cancelada que estava em DUP recebeu tratamento: saída da pré-DUP, atualização ou reembolso na próxima.DiárioAlerta com a reserva e a DUPDepende de terceiros

Exige o evento de cancelamento da plataforma.

C6FechamentoNo dia seguinte ao corte não existe pré-DUP do período anterior em aberto.D+1 do corteAlerta e fechamento manualImplementado
C7EnvioToda DUP emitida tem envio registrado para ao menos um e-mail de cobrança.No envioDUP vai para pendênciasParte 2
C8LeituraLink do kit aberto pelo cliente até 5 dias úteis antes do vencimento.DiárioAlerta interno para contato ativoParte 2

Marcado como a decidir no guia.

C9PendênciasNenhuma DUP na fila de pendências há mais de 1 dia útil.DiárioEscalação ao gestor financeiroImplementado

A escalação por e-mail entra com a régua de avisos, na Parte 2.

C10Virada do WOOFFICENo 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çãoBloqueia o desligamento do WOOFFICEDepende 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

#PontoOpçõesQuem respondeComo está no sistema
D1Onde vivem limite de crédito e bloqueioPlataforma, módulo IAXYS ou Omie. Em qualquer caso a baixa da Omie precisa retornar automaticamenteIAXYS + FinanceiroImplementado no módulo IAXYS, com rota de consulta para a plataforma. Reversível.
D2Onde vivem calendário por cliente e pré-DUPPlataforma, módulo IAXYS ou OmieIAXYS + FinanceiroImplementado no módulo IAXYS, para não acoplar à plataforma de reservas.
D3Onde vive o cadastro de e-mails de cobrança e como migrar do WOOFFICEOmie (tem o campo) ou módulo IAXYS; carga em lote a partir de extração do WOOFFICEIAXYS + FinanceiroCampo criado no cadastro de Clientes B2B do módulo. Aguarda a extração do WOOFFICE.
D4Viabilidade do Plano A (RN-20)Baixa e novo registro via API Itaú/OmieIAXYSEm análise na Parte 2. O recálculo com mesmo número e versão já está pronto.
D5Calendário quinzenalLista dos clientes com calendário próprioFinanceiroDecendial e quinzenal implementados. Falta a lista de clientes por calendário.
D6Validade do link do kitPrazo em dias (a senha já é definida: 8 primeiros dígitos do CNPJ)Financeiro + IAXYSConfiguração FAT_VALIDADE_LINK_DIAS criada com 90 dias como provisório.
D7Fórmula completa do líquidoSinais de crédito de reemissão, desconto e multa; regra do reembolso; arredondamentoFinanceiroImplementada 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.
D8DUP com saldo líquido negativoCrédito carrega para a próxima ou vira duplicata a pagarFinanceiroHoje o saldo negativo fica na DUP e aparece na conciliação. Nenhum tratamento automático.
D9Numeração da DUPNova série com prefixo FAT ou continuidade do legado DUP do WOOFFICEFinanceiro + IAXYSImplementado FAT1001 em diante, conforme a preferência do Financeiro, com prefixo e número inicial configuráveis.
D10Janela do processamento em loteHorário noturno a decidirIAXYSRotina diária às 6h UTC, com fechamento automático desligado por padrão.
D11Calendário de feriadosFonte e manutenção da lista usada na regra de dia útilFinanceiro + IAXYSTabela Feriados criada no banco de dados, com carga manual. Fonte oficial a definir.
D12Omie: mapeamento de camposCliente, categoria, conta corrente e centro de custoFinanceiro + IAXYSAguarda 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

RegraTemaO que garanteSituação
RC-01Fato geradorComissã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-02Fato geradorSó 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-03Fato geradorPré-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-04Fato geradorChave ú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-05StatusCinco estados e só as transições do guia.Implementada
RC-06StatusEm COM e Paga não entram em AV nem em outra COM.Implementada
RC-07CancelamentosCancelada com comissão Bloqueada/Disponível: Cancelada, sem estorno.Implementada
RC-08CancelamentosEm COM/Paga: estorno (Bloqueado até a original ser paga); alteração gera estorno + nova versão.Implementada
RC-09CancelamentosEstornos entram compulsoriamente no próximo AV e na próxima COM.Implementada
RC-10CancelamentosSaldo líquido zero ou negativo.

Provisório: não gera COM e o saldo segue no estoque (D6).

A decidir
RC-37CancelamentosEstorno sem par e anulação de par (casos 1, 2 e 3).Implementada
RC-11AVGerado 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-12AVFiltro por CNPJ e período (emissão ou liberação); comissões fora do período só na tela.Implementada
RC-13AVAV não reserva comissões; aviso de AV aberto em comum.Implementada
RC-14AVNumeração sequencial; COM herda o número do AV.

Prefixos COM_PREFIXO_AV e COM_PREFIXO_COM (D8).

Implementada
RC-15AVIncluir/excluir linhas; estorno não sai.Implementada
RC-16AVAV identificado como relatório prévio, com prazo estimado.Implementada
RC-17AVCancelamento do AV enquanto não virou COM.Implementada
RC-35AVPré-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-36AVAV substituto, notificação e AV de aproveitamento.Implementada
RC-18COMValor = comissões + ajustes − estornos; NF confere, não define o valor.Implementada
RC-19COMConferência humana NF × subtotal por locadora, com tolerância.

Tolerância provisória R$ 0,10 por NF (D4).

Implementada
RC-20COMNFs (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-21COMGeraçã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-22COMVencimento D+10 dias úteis da liberação final; Gerente altera com motivo.

Calendário de feriados compartilhado com a DUP (D3).

Implementada
RC-23COMDados bancários lidos da Omie; reemissão com novos dados antes da remessa.Implementada
RC-24COMCOM imutável; correção só cancelando.Implementada
RC-25COMCancelamento 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-26COMLiquidação na Omie muda para Paga; liquidação composta soma as baixas.Implementada
RC-38COMPagamento devolvido: alerta, Paga → Em COM com Gerente, caminhos 1 e 2.Implementada
RC-39COMDUP vencida exige decisão do Gerente (pagar ou compensar).Implementada
RC-27EnvioAV e COM por e-mail com PDF e Excel anexados.Implementada
RC-28EnvioTexto editável com variáveis.

COM_EMAIL_TEXTO_AV e COM_EMAIL_TEXTO_COM.

Implementada
RC-29EnvioDestinatário solicitante, cópia interna, remetente caixa compartilhada.

Disparo em nome da caixa depende do provedor de e-mail (D2).

Parcial
RC-30AuditoriaLog imutável de documentos, aprovações, vencimentos e consultas à DUP.

Tabela só de acréscimo (UPDATE e DELETE bloqueados no banco).

Implementada
RC-31AuditoriaHistórico por comissão (AVs, COMs, pagamento, estorno).Implementada
RC-32PerfisOperador e Gerente; só Gerente libera COM.

Listas COM_GERENTES, COM_OPERADORES e COM_DIRETORIA.

Implementada
RC-33PerfisSegunda aprovação acima da alçada.

Limite provisório R$ 50.000 (D14).

Implementada
RC-34PerfisSegregaçã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-40GestãoEstoque, 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)

#ControleRegra verificadaQuandoNo sistema
C1UnicidadeNenhuma comissão em duas COMs ativas; uma positiva ativa por chave.Em cada inclusão, na COM e diárioImplementado
C2"Netagem"Nenhuma comissão netada no estoque.Na entrada e diárioDepende de terceiros

Depende do indicador D1; reserva identificada como netada sai do estoque ou alerta se já estiver Em COM/Paga.

C3CoberturaToda reserva não netada tem comissão; sem indicador vai para pendências.DiárioDepende de terceiros

Lado do módulo (pendências) implementado; contagem contra a plataforma depende da exportação da Fase 0.

C4ValorLinhas = COM = título = liquidado.Na geração e na liquidaçãoImplementado
C5StatusPaga se e somente se o título está liquidado.DiárioImplementado
C6EstornosCancelada/alterada com comissão Em COM ou Paga tem estorno.DiárioImplementado
C7Liberação no localBloqueada há mais de 30 dias.DiárioDepende de terceiros

Liberação automática depende do D5.

C8Estorno paradoEstorno Disponível há mais de N dias.DiárioImplementado

COM_DIAS_ESTORNO_PARADO (D16).

C9PendênciasAV em rascunho, COM aguardando aprovação, título com erro.DiárioImplementado
C10Virada do WooficeMigração confere com o legado e o razão.Na viradaDepende de terceiros

Rota de migração pronta; critérios no D17.

C11Conciliação contábilDisponível + Em COM = passivo de comissões.Diário e mensalDepende de terceiros

Base do passivo pronta no relatório; o saldo contábil vem da contabilidade (D10).

C12EnvelhecimentoDisponível sem AV há mais de N dias; fora do período no AV.DiárioImplementado
C13Inadimplência na DUPCOM aberta sem decisão sobre DUP vencida.Diário até a remessaImplementado

Bloqueio da remessa na Omie não é possível pela API: alerta.

Pontos em aberto (D1 a D17)

#PontoQuem respondeComo está no sistema
D1Indicador de netagemTI Mobility + IAXYSAceita netada, valorAbatido e descontarComissao; vazio vai para pendências.
D2Envio de AV e COMFinanceiro + IAXYSOs dois modos prontos (COM_EMAIL_MODO); falta o provedor de e-mail da caixa comissoes@.
D3Calendário de feriadosFinanceiroUsa a tabela Feriados da DUP.
D4Tolerância da NFFinanceiroR$ 0,10 provisório (COM_TOLERANCIA_NF).
D5Gatilho da liberação no localFinanceiro + IAXYSEvento liberacao-local (aceita lote por extrato) e liberação pela tela.
D6Saldo zero ou negativoFinanceiroProvisório: não gera COM e o saldo segue para a próxima rodada.
D7Troca de dados bancáriosFinanceiroBloqueia conta fora do CNPJ do cliente; a troca em si continua na Omie.
D8Numeração e prefixoFinanceiro + IAXYSConfigurável (COM_PREFIXO_AV, COM_PREFIXO_COM, COM_NUMERO_INICIAL).
D9Cadência e autosserviçoFinanceiro + ComercialFase 5.
D10Mapeamento na Omie e contabilizaçãoFinanceiro + IAXYS + contabilidadeCampos COM_OMIE_CATEGORIA, COM_OMIE_CONTA_CORRENTE e COM_OMIE_CONTA_COMPENSACAO; falta a planilha.
D11Retenções e questões fiscaisContabilidadeSem retenção no título; aguarda a contabilidade.
D12Tripla conferência e unicidade da NFFinanceiro + IAXYSImplementado como bloqueio na conferência; XML sinalizado quando ausente.
D13Prazo e base contratualJurídico + FinanceiroCOM_PRAZO_DIAS_UTEIS = 10.
D14Parâmetros de alçada e prazosDiretoria FinanceiraProvisórios: alçada R$ 50.000, envelhecimento 90 dias, pagabilidade desligada.
D15Histórico de estornosTI Mobility + FinanceiroAguardando a exportação.
D16Parâmetros de C8 e C9Financeiro60 dias e 1 dia útil, configuráveis.
D17Virada do WooficeFinanceiro + IAXYS + TI MobilityCOM_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.

RegistroCampo OmieFormatoExemplo
Clientecodigo_cliente_integracaoMOB-{cliente}MOB-1518
Ordem de ServiçocCodIntOSMOB-{empresa}-{filial}-{file}-{CodigoWooMobil}MOB-29-26-00341130-341130
Conta a recebercodigo_lancamento_integracaoMOB-{file}-CRE-{CodigoWooMobil}-R{n}-P{parcela}MOB-00341183-CRE-341183-R1-P2
Conta a pagarcodigo_lancamento_integracaoMOB-{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.

FormaRecebimentoLegendaPrazo
1INV0 dias
2CASH0 dias
3FATURADO30 dias
4CC30 dias
5GR0 dias
6TKT0 dias
7MTP0 dias
8CARTAO_CORPORATIVO30 dias
9CONTRA_APRESENTACAO0 dias
10CHEQUE0 dias
11CARTAODEBITO0 dias
12MCO0 dias
13VENDAFINANCIADA0 dias
14SEMCOBRANCA0 dias
15DESPESAINTERNA0 dias
16CARTAO_PROPRIO0 dias
17BOLETO7 dias
18LOCAL0 dias
19DEPOSITO0 dias
20Poupanca_Programada0 dias
21MoedaConversao0 dias
22CartaDeCredito0 dias
23NOTA DE CREDITO0 dias
24FATURADO + CARTAO30 dias
25PIX0 dias
27PIX RECEBIDO0 dias
29Link de Pagamento0 dias
FormaPagamentoLegendaPrazo
1INV30 dias
2CASH30 dias
3FATURADO30 dias
4CC30 dias
5GR30 dias
6TKT30 dias
7MTP30 dias
8CARTAO_CORPORATIVO30 dias
9CONTRA_APRESENTACAO30 dias
10CHEQUE30 dias
11CARTAODEBITO30 dias
12MCO30 dias
13VENDAFINANCIADA30 dias
14SEMCOBRANCA30 dias

Webhooks

Dois sentidos: a Omie avisa o orquestrador, e o orquestrador avisa a Mobility.

Cadastro na Omie

  1. Acesse developer.omie.com.br com um usuário administrador da conta da Mobility.
  2. Abra Aplicativos, escolha o app da integração e clique em Adicionar novo webhook.
  3. 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.
  4. Marque os tópicos abaixo e salve. A Omie envia uma notificação de teste.
Financas.ContaReceber.IncluidoFinancas.ContaReceber.AlteradoFinancas.ContaReceber.ExcluidoFinancas.ContaReceber.BaixaRealizadaFinancas.ContaReceber.BaixaCanceladaFinancas.ContaPagar.IncluidoFinancas.ContaPagar.AlteradoFinancas.ContaPagar.ExcluidoFinancas.ContaPagar.BaixaRealizadaFinancas.ContaPagar.BaixaCanceladaOrdemServico.IncluidaOrdemServico.AlteradaOrdemServico.ExcluidaOrdemServico.FaturadaOrdemServico.CanceladaClienteFornecedor.IncluidoClienteFornecedor.AlteradoClienteFornecedor.Excluido

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-Signature

Conector 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.

FerramentaO que responde
resumo_operacaoQuantos 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_reservaSituaçã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_rotasCatá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_rotaContrato 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_regrasRegras 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_integracoesIntegraçõ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_faturamentoSituaçã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_apiUso 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.md
do 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)GrupoUso
OMIE_COD_SERVICO_LOCACAO *OmienCodServ do serviço de locação usado nos itens da OS.
OMIE_CATEG_RECEITA *OmieCategoria dos títulos a receber e da OS.
OMIE_CATEG_COMISSAOOmieCategoria da comissão repassada.
OMIE_CATEG_REEMBOLSOOmieCategoria do reembolso ao cliente.
OMIE_CATEG_DESPESAOmieCategoria dos demais pagamentos.
OMIE_CONTA_CORRENTE *OmienCodCC da conta corrente padrão.
OMIE_CRIAR_OSOmieCria uma OS por reserva.
OMIE_ETAPA_OSOmieEtapa inicial da OS.
PRAZO_PAGAMENTO_DIASPrazosVencimento padrão de títulos a pagar.
INTERVALO_PARCELAS_DIASPrazosDias entre parcelas.
RETRY_MINUTOSIntegraçãoEspera antes de reprocessar.
MAX_TENTATIVASIntegraçãoTentativas antes de ERRO.
MOBILITY_WEBHOOK_URLCallbackURL de callback da Mobility.
AUDITORIA_ATIVAIntegraçãoRegistra cada chamada à API na trilha de auditoria (tela Logs).
AUDITORIA_IGNORAR_HEALTHIntegraçãoNão registra as chamadas de /health (monitoramento).
AUDITORIA_GUARDAR_IPIntegraçãoGuarda o IP inteiro; false mascara o último bloco.
FAT_PREFIXO_NUMEROFaturamentoPrefixo da numeração das duplicatas (ponto D9 do guia).
FAT_NUMERO_INICIALFaturamentoPrimeiro número da série nova.
FAT_CALENDARIO_PADRAOFaturamentoCalendário usado quando o cliente não tem um próprio (RN-07).
FAT_ALERTA_LIMITE_PCTFaturamentoPercentual do limite que dispara alerta ao cliente e ao Financeiro (RN-05).
FAT_BLOQUEIO_DIAS_UTEISFaturamentoDias úteis de atraso que bloqueiam novas emissões no Faturado (RN-03).
FAT_RETENCAO_REEMBOLSO_PCTFaturamentoRetenção aplicada ao reembolso, provisória até a definição do ponto D7.
FAT_TOLERANCIA_CENTAVOSFaturamentoDiferença aceita entre o líquido da plataforma e o recalculado (seção 5.3).
FAT_LEMBRETE_DIAS_UTEISFaturamentoDias úteis antes do vencimento para o lembrete amigável (RN-30).
FAT_AVISO_ATRASO_DIAS_UTEISFaturamentoDias úteis após o vencimento para o aviso de atraso (RN-31).
FAT_VALIDADE_LINK_DIASFaturamentoValidade do link do kit de faturamento, provisória até o ponto D6.
FAT_CORTE_AUTOMATICOFaturamentoFecha as pré-DUPs vencidas na rotina automática (RN-14). Comece em false para conferência manual.
COM_INGESTAO_ATIVAComissõesA venda importada alimenta o estoque de comissões B2B (RC-01, RC-02).
COM_CPA_POR_VENDAComissõesManté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_AVComissõesPrefixo do aviso de comissão (RC-14).
COM_PREFIXO_COMComissõesPrefixo da duplicata de comissão; CAV se o ponto D8 for aprovado.
COM_NUMERO_INICIALComissõesPrimeiro número da série AV/COM. Com prefixo COM, deve ficar acima do último número do legado (D8).
COM_PRAZO_DIAS_UTEISComissõesVencimento padrão da COM em dias úteis após a liberação final (RC-22, D13).
COM_TOLERANCIA_NFComissõesDiferença aceita entre a NF e o subtotal da locadora, em reais (RC-19, D4). Provisória.
COM_ALCADA_LIMITEComissõesCOM acima deste valor exige segunda aprovação (RC-33, D14). Provisório; 0 desliga.
COM_GERENTESComissõesE-mails com perfil Gerente, separados por vírgula (RC-32). Vazio: Admin do painel atua como Gerente.
COM_OPERADORESComissõesE-mails com perfil Operador (RC-32). Vazio: Testador do painel atua como Operador.
COM_DIRETORIAComissõesE-mails da Diretoria Financeira aptos à segunda aprovação (RC-33).
COM_DOMINIO_USUARIOSComissõesDomínio exigido dos perfis (ex.: mobility.com.br). Vazio não restringe.
COM_OMIE_CATEGORIAComissõesCategoria do título da COM na Omie, contrapartida no passivo de comissões (D10). Vazio usa OMIE_CATEG_COMISSAO.
COM_OMIE_CONTA_CORRENTEComissõesConta corrente de saída da COM (D10). Vazio usa OMIE_CONTA_CORRENTE.
COM_OMIE_CONTA_COMPENSACAOComissõesConta usada pela tesouraria na compensação COM × DUP; baixas nela contam como compensação (RC-26, RC-39).
COM_OMIE_ANEXAR_NFComissõesAnexa as NFs ao título a pagar na Omie (seção 8.1).
COM_EMAIL_MODOComissõesmanual (download e envio pela caixa compartilhada) ou webhook (disparo pelo sistema) — ponto D2.
COM_EMAIL_WEBHOOK_URLComissõesEndpoint que envia o e-mail a partir de comissoes@mobility.com.br (ex.: workflow com Gmail/Microsoft 365).
COM_EMAIL_REMETENTEComissõesCaixa compartilhada remetente (RC-11, RC-29).
COM_EMAIL_COPIAComissõesE-mail interno de registro, em cópia (RC-29).
COM_EMAIL_TEXTO_AVComissõesTexto do e-mail do AV, com variáveis {cliente} {numero} {valor} {conta} {prazo} (RC-27).
COM_EMAIL_TEXTO_COMComissõesTexto do e-mail da COM (RC-28).
COM_LINK_LOCADORASComissõesLink da biblioteca de dados das locadoras para emissão das NFs (seção 6.1).
COM_DIAS_ESTORNO_PARADOComissõesEstorno Disponível há mais dias sem COM gera alerta (C8, D16).
COM_DIAS_PENDENCIAComissõesDias úteis de AV em rascunho ou COM aguardando aprovação antes da escalação (C9, D16).
COM_DIAS_ENVELHECIMENTOComissõesComissão Disponível sem AV há mais dias gera alerta (C12, D14).
COM_DIAS_PAGABILIDADEComissõesPrazo 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_SECRETCredenciais do aplicativo Omie da Mobility. O appKey também autentica os webhooks.
MOBILITY_API_KEYChave que a Mobility envia em X-Api-Key.
MOBILITY_WEBHOOK_SECRETSegredo do HMAC dos callbacks para a Mobility.
BANCO_DADOS_TOKENAcesso ao banco de dados do orquestrador (registros, configurações e login do painel).
SESSION_SECRETAssinatura do cookie de sessão do painel.
CRON_SECRETProtege a rota de reprocessamento.
DATABASE_URL / PERSISTENCIAOpcional. 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