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.

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)

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
    }
  ]
}
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.

Parâmetros

moedaquery · obrigatórioCódigo ISO da moeda.USD
tipoqueryTipo de produto (mantido por compatibilidade).Carro
dataqueryData de referência YYYY-MM-DD. Padrão: hoje.2026-09-10
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
[
  {
    "moeda": "USD",
    "tipo": "Carro",
    "data": "2026-09-10",
    "valor": 5.0846,
    "fonte": "PTAX"
  }
]

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 (Notion, .env ou padrão).

Lê as bases Configurações e Formas de recebimento e pagamento da página Mobility no Notion. 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, ou editando direto no Notion.

Parâmetros

recarregarquery1 para reler o Notion 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": "notion",
  "itens": [
    {
      "chave": "OMIE_CATEG_RECEITA",
      "valor": "1.01.02",
      "origem": "notion",
      "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 Notion.

Corpo { chave, valor } para um parâmetro ou { forma: { tipo, codigo, prazo } } para um prazo.

Valida o tipo (número, booleano), grava na base do Notion, 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

Operação

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.

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.
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.
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 base Formas de recebimento e pagamento do Notion. 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 (base 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 base Configurações. 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 base Configurações do Notion (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 Notion

Categorias, conta corrente, serviço, prazos e URL de callback ficam na base Configurações.

  • Prioridade de cada chave: linha ativa com valor na base Configurações do Notion, 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, NOTION_TOKEN, SESSION_SECRET e, se usado, DATABASE_URL.
  • O orquestrador relê o Notion a cada 60 segundos. Alterações feitas pelo painel valem na hora.
  • Se o Notion ficar indisponível, o último valor lido continua valendo.
RN19

Persistência nas bases do Notion

Vendas, eventos, log e cotações são gravados em bases da página Mobility.

  • Bases: 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 na própria linha, para auditoria e reprocessamento.
  • A API do Notion aceita cerca de 3 requisições por segundo. Para volume de produção alto, basta configurar DATABASE_URL e PERSISTENCIA=postgres, sem mudar o contrato.

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 base Formas de recebimento e pagamento do Notion 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

Bases e configurações no Notion

A página Mobility do Notion é a base de dados do orquestrador. Parâmetros de negócio são editados lá (ou 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.
  • CotaçõesCache das cotações PTAX consultadas.
  • UsuáriosQuem acessa o painel de testes e com qual perfil.
Abrir a página Mobility no Notion
Chave (base 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.

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.
NOTION_TOKENIntegração do Notion com acesso à página Mobility (bases, configurações e login).
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 notion, 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