{"openapi":"3.1.0","info":{"title":"AutoPass — API de Fornecedores de Manutenção","version":"1.0.0","description":"Integração do sistema do fornecedor (ERP) com o AutoPass: ocorrências, orçamentos, fases, arquivos e notas fiscais.\n\n**Endereço:** `https://api.autopas.com.br/provider/v1`\n\n## Primeiros passos\n\n1. **Token** — troque seu `client_id` e `client_secret` por um token em `POST /oauth/token`. Ele vale 1 hora.\n2. **Autorize** — envie `Authorization: Bearer <token>` em todas as chamadas (nesta página: botão **Authorize**).\n3. **Liste** — `GET /contract-item-request` traz suas ocorrências; filtre por fase, placa, protocolo ou período.\n4. **Detalhe** — `GET /contract-item-request/{id}` traz a ocorrência com seus orçamentos e itens.\n\n```\ncurl -X POST https://api.autopas.com.br/provider/v1/oauth/token \\\n  -d grant_type=client_credentials -d client_id=SEU_CLIENT_ID -d client_secret=SEU_CLIENT_SECRET\n```\n\n## Fases (workflowStepId)\n\n| id | Fase |\n|---|---|\n| 5 | Aguardando Chegada |\n| 6 | Aguardando Orçamento |\n| 7 | Orçamento em Análise |\n| 41 | Aguardando Aprovação |\n| 15 | Serviço em Execução |\n| 8 | Aguardando Saída |\n| 901 | Ag. Nota Fiscal — falta nota em algum orçamento aprovado (nunca enviada, parcial ou devolvida) |\n| 902 | Ag. Validação — notas enviadas, em análise |\n| 903 | Finalizada — nada pendente |\n\nOrçamento de até R$ 0,01 não precisa de nota.\n\n## Convenções\n\n- **Identificador:** use o protocolo da ocorrência (ex.: `QUAL-494060`). O id numérico também é aceito quando não for ambíguo.\n- **Respostas:** sempre `{ \"data\": ... }` — um objeto, ou uma lista com `count` (e `total`/`offset` quando pagina). Campos planos, sem objetos aninhados.\n- **Paginação:** 100 itens por página, do mais novo para o mais antigo; avance com `offset` (0, 100, 200...) até `total`.\n- **Escritas:** os `POST` de orçamento, arquivo e nota exigem o cabeçalho `Idempotency-Key` (único por operação); repetir a mesma chave devolve a mesma resposta, sem executar de novo. Mudança de fase não usa a chave: repetida, é recusada (`OPERACAO_RECUSADA`).\n- **Erros:** `application/problem+json` (RFC 9457) com `code` estável — decida pelo `code`, não pela mensagem.\n- **Limite:** chamadas por minuto por credencial; acima dele, `429` (tente de novo em instantes)."},"servers":[{"url":"/provider/v1"}],"security":[{"bearerAuth":[]}],"tags":[{"name":"Autenticação","description":"Token de acesso (OAuth2 client credentials)."},{"name":"Fornecedor","description":"Seus dados e os clientes que você atende."},{"name":"Ocorrências","description":"Busca e detalhe das ocorrências."},{"name":"Orçamentos","description":"Consulta e envio de orçamentos."},{"name":"Catálogo","description":"Itens aceitos no orçamento e planos de revisão."},{"name":"Fases","description":"Chegada, conclusão do serviço e saída do veículo."},{"name":"Arquivos","description":"Fotos, vídeos e documentos da ocorrência."},{"name":"Notas fiscais","description":"Envio da nota fiscal."}],"paths":{"/oauth/token":{"post":{"tags":["Autenticação"],"summary":"Gera token de acesso (client credentials)","description":"Envie `client_id` e `client_secret` no corpo (form ou JSON) ou em `Authorization: Basic`. O token vale 1 hora; gere outro quando expirar.","security":[],"requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"type":"object","required":["grant_type","client_id","client_secret"],"properties":{"grant_type":{"const":"client_credentials"},"client_id":{"type":"string"},"client_secret":{"type":"string"}}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"access_token":{"type":"string"},"token_type":{"const":"Bearer"},"expires_in":{"type":"integer","example":3600}}}}}},"400":{"description":"grant_type não suportado."},"401":{"description":"invalid_client"}}}},"/provider/me":{"get":{"tags":["Fornecedor"],"summary":"Dados do fornecedor e clientes atendidos","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ProviderMe"}}}}}},"401":{"description":"Token ausente, inválido ou expirado.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"TOKEN_INVALIDO":{"summary":"TOKEN_INVALIDO","value":{"type":"about:blank","title":"TOKEN_INVALIDO","status":401,"code":"TOKEN_INVALIDO","detail":"Token inválido ou expirado. Gere um novo em POST /oauth/token."}},"CREDENCIAL_REVOGADA":{"summary":"CREDENCIAL_REVOGADA","value":{"type":"about:blank","title":"CREDENCIAL_REVOGADA","status":401,"code":"CREDENCIAL_REVOGADA","detail":"Credencial revogada."}}}}}}}}},"/contract-item-request":{"get":{"tags":["Ocorrências"],"summary":"Lista e busca as ocorrências do fornecedor","description":"Ocorrências ativas e encerradas (`active: false`). Todos os filtros são opcionais e se combinam. 100 por página, da mais nova para a mais antiga.","parameters":[{"name":"tenant","in":"query","schema":{"type":"string"},"description":"Slug do cliente (veja GET /provider/me)."},{"name":"requestNumber","in":"query","schema":{"type":"string"},"description":"Protocolo exato, ex.: QUAL-494060."},{"name":"licensePlate","in":"query","schema":{"type":"string"},"description":"Placa, com ou sem hífen."},{"name":"workflowStepId","in":"query","schema":{"type":"string","example":"901,902"},"description":"Uma ou várias fases, separadas por vírgula (veja a tabela de fases)."},{"name":"reasonId","in":"query","schema":{"type":"integer"},"description":"Motivo (ex.: 3 = Sinistro)."},{"name":"scheduledFrom","in":"query","schema":{"type":"string","format":"date"},"description":"Agendadas a partir desta data (horário de Brasília)."},{"name":"scheduledTo","in":"query","schema":{"type":"string","format":"date"},"description":"Agendadas até esta data, inclusive (horário de Brasília)."},{"name":"active","in":"query","schema":{"type":"boolean"},"description":"true = só ativas; false = só encerradas."},{"name":"offset","in":"query","schema":{"type":"integer","minimum":0,"default":0},"description":"Página de 100: 0, 100, 200..."}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/ListedOccurrence"}},"count":{"type":"integer","description":"Itens nesta página."},"total":{"type":"integer","description":"Itens que atendem aos filtros (todas as páginas)."},"offset":{"type":"integer"},"generatedAt":{"type":["string","null"],"description":"Momento da última atualização dos dados."}}}}}},"400":{"description":"Parâmetro inválido ou cliente fora dos clientes do fornecedor.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"PARAMETRO_INVALIDO":{"summary":"PARAMETRO_INVALIDO","value":{"type":"about:blank","title":"PARAMETRO_INVALIDO","status":400,"code":"PARAMETRO_INVALIDO","detail":"scheduledFrom deve ser uma data (AAAA-MM-DD)."}},"CLIENTE_INVALIDO":{"summary":"CLIENTE_INVALIDO","value":{"type":"about:blank","title":"CLIENTE_INVALIDO","status":400,"code":"CLIENTE_INVALIDO","detail":"Cliente não atendido por este fornecedor."}}}}}},"401":{"description":"Token ausente, inválido ou expirado.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"TOKEN_INVALIDO":{"summary":"TOKEN_INVALIDO","value":{"type":"about:blank","title":"TOKEN_INVALIDO","status":401,"code":"TOKEN_INVALIDO","detail":"Token inválido ou expirado. Gere um novo em POST /oauth/token."}},"CREDENCIAL_REVOGADA":{"summary":"CREDENCIAL_REVOGADA","value":{"type":"about:blank","title":"CREDENCIAL_REVOGADA","status":401,"code":"CREDENCIAL_REVOGADA","detail":"Credencial revogada."}}}}}},"429":{"description":"Limite de chamadas atingido.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"LIMITE_DE_CHAMADAS":{"summary":"LIMITE_DE_CHAMADAS","value":{"type":"about:blank","title":"LIMITE_DE_CHAMADAS","status":429,"code":"LIMITE_DE_CHAMADAS","detail":"Limite de chamadas atingido. Tente novamente em instantes."}}}}}}}}},"/contract-item-request/{id}":{"get":{"tags":["Ocorrências"],"summary":"Ocorrência com os seus orçamentos e os itens de cada um","parameters":[{"name":"id","in":"path","required":true,"description":"Protocolo da ocorrência (ex.: QUAL-494060) ou id numérico. Prefira o protocolo: ele identifica o cliente.","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Occurrence"}}}}}},"400":{"description":"Identificador inválido.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"IDENTIFICADOR_INVALIDO":{"summary":"IDENTIFICADOR_INVALIDO","value":{"type":"about:blank","title":"IDENTIFICADOR_INVALIDO","status":400,"code":"IDENTIFICADOR_INVALIDO","detail":"Use o protocolo da ocorrência (ex.: QUAL-494060) ou o id numérico."}}}}}},"401":{"description":"Token ausente, inválido ou expirado.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"TOKEN_INVALIDO":{"summary":"TOKEN_INVALIDO","value":{"type":"about:blank","title":"TOKEN_INVALIDO","status":401,"code":"TOKEN_INVALIDO","detail":"Token inválido ou expirado. Gere um novo em POST /oauth/token."}},"CREDENCIAL_REVOGADA":{"summary":"CREDENCIAL_REVOGADA","value":{"type":"about:blank","title":"CREDENCIAL_REVOGADA","status":401,"code":"CREDENCIAL_REVOGADA","detail":"Credencial revogada."}}}}}},"404":{"description":"Ocorrência não encontrada (ou não pertence a este fornecedor).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"NAO_ENCONTRADO":{"summary":"NAO_ENCONTRADO","value":{"type":"about:blank","title":"NAO_ENCONTRADO","status":404,"code":"NAO_ENCONTRADO","detail":"Ocorrência não encontrada."}}}}}},"409":{"description":"Identificador ambíguo.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"IDENTIFICADOR_AMBIGUO":{"summary":"IDENTIFICADOR_AMBIGUO","value":{"type":"about:blank","title":"IDENTIFICADOR_AMBIGUO","status":409,"code":"IDENTIFICADOR_AMBIGUO","detail":"Este id existe em mais de um cliente. Use o protocolo da ocorrência (ex.: QUAL-494060)."}}}}}},"429":{"description":"Limite de chamadas atingido.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"LIMITE_DE_CHAMADAS":{"summary":"LIMITE_DE_CHAMADAS","value":{"type":"about:blank","title":"LIMITE_DE_CHAMADAS","status":429,"code":"LIMITE_DE_CHAMADAS","detail":"Limite de chamadas atingido. Tente novamente em instantes."}}}}}},"502":{"description":"Sistema do cliente indisponível no momento; tente de novo.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"SISTEMA_INDISPONIVEL":{"summary":"SISTEMA_INDISPONIVEL","value":{"type":"about:blank","title":"SISTEMA_INDISPONIVEL","status":502,"code":"SISTEMA_INDISPONIVEL","detail":"O sistema de gestão da frota está indisponível. Tente novamente em instantes."}}}}}}}}},"/contract-item-request/{id}/order/{orderId}":{"get":{"tags":["Orçamentos"],"summary":"Um orçamento com os itens","description":"Se o orçamento é de outro fornecedor e tem itens seus, vêm só os seus itens (`providerId` = null).","parameters":[{"name":"id","in":"path","required":true,"description":"Protocolo da ocorrência (ex.: QUAL-494060) ou id numérico. Prefira o protocolo: ele identifica o cliente.","schema":{"type":"string"}},{"name":"orderId","in":"path","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Order"}}}}}},"400":{"description":"orderId inválido.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"PARAMETRO_INVALIDO":{"summary":"PARAMETRO_INVALIDO","value":{"type":"about:blank","title":"PARAMETRO_INVALIDO","status":400,"code":"PARAMETRO_INVALIDO","detail":"orderId inválido."}}}}}},"401":{"description":"Token ausente, inválido ou expirado.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"TOKEN_INVALIDO":{"summary":"TOKEN_INVALIDO","value":{"type":"about:blank","title":"TOKEN_INVALIDO","status":401,"code":"TOKEN_INVALIDO","detail":"Token inválido ou expirado. Gere um novo em POST /oauth/token."}},"CREDENCIAL_REVOGADA":{"summary":"CREDENCIAL_REVOGADA","value":{"type":"about:blank","title":"CREDENCIAL_REVOGADA","status":401,"code":"CREDENCIAL_REVOGADA","detail":"Credencial revogada."}}}}}},"404":{"description":"Orçamento não encontrado (inclusive o de outro fornecedor).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"NAO_ENCONTRADO":{"summary":"NAO_ENCONTRADO","value":{"type":"about:blank","title":"NAO_ENCONTRADO","status":404,"code":"NAO_ENCONTRADO","detail":"Orçamento não encontrado."}}}}}},"409":{"description":"Identificador ambíguo.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"IDENTIFICADOR_AMBIGUO":{"summary":"IDENTIFICADOR_AMBIGUO","value":{"type":"about:blank","title":"IDENTIFICADOR_AMBIGUO","status":409,"code":"IDENTIFICADOR_AMBIGUO","detail":"Este id existe em mais de um cliente. Use o protocolo da ocorrência (ex.: QUAL-494060)."}}}}}},"429":{"description":"Limite de chamadas atingido.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"LIMITE_DE_CHAMADAS":{"summary":"LIMITE_DE_CHAMADAS","value":{"type":"about:blank","title":"LIMITE_DE_CHAMADAS","status":429,"code":"LIMITE_DE_CHAMADAS","detail":"Limite de chamadas atingido. Tente novamente em instantes."}}}}}},"502":{"description":"Sistema do cliente indisponível no momento; tente de novo.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"SISTEMA_INDISPONIVEL":{"summary":"SISTEMA_INDISPONIVEL","value":{"type":"about:blank","title":"SISTEMA_INDISPONIVEL","status":502,"code":"SISTEMA_INDISPONIVEL","detail":"O sistema de gestão da frota está indisponível. Tente novamente em instantes."}}}}}}}}},"/contract-item-request/{id}/order":{"post":{"tags":["Orçamentos"],"summary":"Envia orçamento","description":"Os itens vêm do catálogo (`GET /part`), dentro do valor máximo, com marca para peças e DOT para pneus. Para ajustar um orçamento enviado, envie um novo.\n\n**Revisão:** envie o item da revisão e, se quiser, os itens do plano (`GET /part?revisionPartId=`) como itens comuns. Item do plano com o valor do plano não passa pelo valor máximo. O plano completo não é exigido.","parameters":[{"name":"id","in":"path","required":true,"description":"Protocolo da ocorrência (ex.: QUAL-494060) ou id numérico. Prefira o protocolo: ele identifica o cliente.","schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":true,"description":"Chave única por operação (8–200 caracteres). Reenvio com a mesma chave devolve a mesma resposta.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrderInput"}}}},"responses":{"201":{"description":"Orçamento criado","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/OrderCreated"}}}}}},"400":{"description":"Identificador ou Idempotency-Key inválidos.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"IDENTIFICADOR_INVALIDO":{"summary":"IDENTIFICADOR_INVALIDO","value":{"type":"about:blank","title":"IDENTIFICADOR_INVALIDO","status":400,"code":"IDENTIFICADOR_INVALIDO","detail":"Use o protocolo da ocorrência (ex.: QUAL-494060) ou o id numérico."}},"IDEMPOTENCY_KEY_OBRIGATORIA":{"summary":"IDEMPOTENCY_KEY_OBRIGATORIA","value":{"type":"about:blank","title":"IDEMPOTENCY_KEY_OBRIGATORIA","status":400,"code":"IDEMPOTENCY_KEY_OBRIGATORIA","detail":"Envie o cabeçalho Idempotency-Key (8 a 200 caracteres)."}}}}}},"401":{"description":"Token ausente, inválido ou expirado.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"TOKEN_INVALIDO":{"summary":"TOKEN_INVALIDO","value":{"type":"about:blank","title":"TOKEN_INVALIDO","status":401,"code":"TOKEN_INVALIDO","detail":"Token inválido ou expirado. Gere um novo em POST /oauth/token."}},"CREDENCIAL_REVOGADA":{"summary":"CREDENCIAL_REVOGADA","value":{"type":"about:blank","title":"CREDENCIAL_REVOGADA","status":401,"code":"CREDENCIAL_REVOGADA","detail":"Credencial revogada."}}}}}},"404":{"description":"Ocorrência não encontrada (ou não pertence a este fornecedor).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"NAO_ENCONTRADO":{"summary":"NAO_ENCONTRADO","value":{"type":"about:blank","title":"NAO_ENCONTRADO","status":404,"code":"NAO_ENCONTRADO","detail":"Ocorrência não encontrada."}}}}}},"409":{"description":"Identificador ambíguo ou operação com a mesma Idempotency-Key em andamento.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"IDENTIFICADOR_AMBIGUO":{"summary":"IDENTIFICADOR_AMBIGUO","value":{"type":"about:blank","title":"IDENTIFICADOR_AMBIGUO","status":409,"code":"IDENTIFICADOR_AMBIGUO","detail":"Este id existe em mais de um cliente. Use o protocolo da ocorrência (ex.: QUAL-494060)."}},"OPERACAO_EM_ANDAMENTO":{"summary":"OPERACAO_EM_ANDAMENTO","value":{"type":"about:blank","title":"OPERACAO_EM_ANDAMENTO","status":409,"code":"OPERACAO_EM_ANDAMENTO","detail":"Já existe uma operação com esta Idempotency-Key em andamento."}}}}}},"422":{"description":"ORCAMENTO_INVALIDO: `violations` traz um item por regra não atendida. ORCAMENTO_RECUSADO: recusado pelo sistema do cliente.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/OrderProblem"},"examples":{"ORCAMENTO_INVALIDO":{"summary":"ORCAMENTO_INVALIDO","value":{"type":"about:blank","title":"ORCAMENTO_INVALIDO","status":422,"code":"ORCAMENTO_INVALIDO","detail":"O orçamento não atende às regras do cliente.","violations":[{"code":"VALOR_ACIMA_LIMITE","message":"Valor unitário acima do limite cadastrado (180.00).","field":"items[0].unitPrice","maxPrice":180},{"code":"MARCA_OBRIGATORIA","message":"Informe a marca da peça.","field":"items[1].brand"}]}},"ORCAMENTO_RECUSADO":{"summary":"ORCAMENTO_RECUSADO","value":{"type":"about:blank","title":"ORCAMENTO_RECUSADO","status":422,"code":"ORCAMENTO_RECUSADO","detail":"O orçamento foi recusado pelo sistema de gestão da frota."}}}}}},"429":{"description":"Limite de chamadas atingido.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"LIMITE_DE_CHAMADAS":{"summary":"LIMITE_DE_CHAMADAS","value":{"type":"about:blank","title":"LIMITE_DE_CHAMADAS","status":429,"code":"LIMITE_DE_CHAMADAS","detail":"Limite de chamadas atingido. Tente novamente em instantes."}}}}}},"502":{"description":"Sistema do cliente indisponível no momento; tente de novo.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"SISTEMA_INDISPONIVEL":{"summary":"SISTEMA_INDISPONIVEL","value":{"type":"about:blank","title":"SISTEMA_INDISPONIVEL","status":502,"code":"SISTEMA_INDISPONIVEL","detail":"O sistema de gestão da frota está indisponível. Tente novamente em instantes."}}}}}}}}},"/part":{"get":{"tags":["Catálogo"],"summary":"Catálogo: busca de itens ou plano de uma revisão","description":"Dois modos:\n- `search`: itens aceitos no orçamento (até 100), com o valor máximo quando cadastrado. `isRevision: true` indica um item de revisão.\n- `revisionPartId`: o plano da revisão para o modelo do veículo. Vem o item da revisão (`isRevision: true`) e os itens do plano (`revisionPartId` preenchido), com quantidade e valor do plano.\n\nInforme a ocorrência (`contractItemRequest`, recomendado) ou `tenant` + `vehicleModel`.","parameters":[{"name":"search","in":"query","schema":{"type":"string","minLength":2},"description":"Nome, código ou tipo do item."},{"name":"revisionPartId","in":"query","schema":{"type":"integer"},"description":"partId de um item com isRevision: true."},{"name":"contractItemRequest","in":"query","schema":{"type":"string"},"description":"Protocolo da ocorrência: define o cliente e o modelo do veículo (recomendado)."},{"name":"tenant","in":"query","schema":{"type":"string"}},{"name":"vehicleModel","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/CatalogPart"}},"count":{"type":"integer"}}}}}},"400":{"description":"Parâmetro inválido.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"BUSCA_CURTA":{"summary":"BUSCA_CURTA","value":{"type":"about:blank","title":"BUSCA_CURTA","status":400,"code":"BUSCA_CURTA","detail":"Informe search com ao menos 2 caracteres, ou revisionPartId."}},"CLIENTE_OBRIGATORIO":{"summary":"CLIENTE_OBRIGATORIO","value":{"type":"about:blank","title":"CLIENTE_OBRIGATORIO","status":400,"code":"CLIENTE_OBRIGATORIO","detail":"Informe contractItemRequest (protocolo) ou tenant."}},"MODELO_NAO_IDENTIFICADO":{"summary":"MODELO_NAO_IDENTIFICADO","value":{"type":"about:blank","title":"MODELO_NAO_IDENTIFICADO","status":400,"code":"MODELO_NAO_IDENTIFICADO","detail":"Modelo do veículo não identificado: informe contractItemRequest ou vehicleModel exato."}}}}}},"401":{"description":"Token ausente, inválido ou expirado.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"TOKEN_INVALIDO":{"summary":"TOKEN_INVALIDO","value":{"type":"about:blank","title":"TOKEN_INVALIDO","status":401,"code":"TOKEN_INVALIDO","detail":"Token inválido ou expirado. Gere um novo em POST /oauth/token."}},"CREDENCIAL_REVOGADA":{"summary":"CREDENCIAL_REVOGADA","value":{"type":"about:blank","title":"CREDENCIAL_REVOGADA","status":401,"code":"CREDENCIAL_REVOGADA","detail":"Credencial revogada."}}}}}},"404":{"description":"Ocorrência ou revisão não encontrada.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"NAO_ENCONTRADO":{"summary":"NAO_ENCONTRADO","value":{"type":"about:blank","title":"NAO_ENCONTRADO","status":404,"code":"NAO_ENCONTRADO","detail":"Revisão não encontrada para o modelo deste veículo."}}}}}},"409":{"description":"Identificador ambíguo.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"IDENTIFICADOR_AMBIGUO":{"summary":"IDENTIFICADOR_AMBIGUO","value":{"type":"about:blank","title":"IDENTIFICADOR_AMBIGUO","status":409,"code":"IDENTIFICADOR_AMBIGUO","detail":"Este id existe em mais de um cliente. Use o protocolo da ocorrência (ex.: QUAL-494060)."}}}}}},"429":{"description":"Limite de chamadas atingido.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"LIMITE_DE_CHAMADAS":{"summary":"LIMITE_DE_CHAMADAS","value":{"type":"about:blank","title":"LIMITE_DE_CHAMADAS","status":429,"code":"LIMITE_DE_CHAMADAS","detail":"Limite de chamadas atingido. Tente novamente em instantes."}}}}}},"502":{"description":"Sistema do cliente indisponível no momento; tente de novo.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"SISTEMA_INDISPONIVEL":{"summary":"SISTEMA_INDISPONIVEL","value":{"type":"about:blank","title":"SISTEMA_INDISPONIVEL","status":502,"code":"SISTEMA_INDISPONIVEL","detail":"O sistema de gestão da frota está indisponível. Tente novamente em instantes."}}}}}}}}},"/contract-item-request/{id}/waiting-checkin":{"post":{"tags":["Fases"],"summary":"Confirma a chegada do veículo","parameters":[{"name":"id","in":"path","required":true,"description":"Protocolo da ocorrência (ex.: QUAL-494060) ou id numérico. Prefira o protocolo: ele identifica o cliente.","schema":{"type":"string"}}],"responses":{"200":{"description":"Fase alterada.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ActionResult"}}}}}},"400":{"description":"Identificador inválido.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"IDENTIFICADOR_INVALIDO":{"summary":"IDENTIFICADOR_INVALIDO","value":{"type":"about:blank","title":"IDENTIFICADOR_INVALIDO","status":400,"code":"IDENTIFICADOR_INVALIDO","detail":"Use o protocolo da ocorrência (ex.: QUAL-494060) ou o id numérico."}}}}}},"401":{"description":"Token ausente, inválido ou expirado.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"TOKEN_INVALIDO":{"summary":"TOKEN_INVALIDO","value":{"type":"about:blank","title":"TOKEN_INVALIDO","status":401,"code":"TOKEN_INVALIDO","detail":"Token inválido ou expirado. Gere um novo em POST /oauth/token."}},"CREDENCIAL_REVOGADA":{"summary":"CREDENCIAL_REVOGADA","value":{"type":"about:blank","title":"CREDENCIAL_REVOGADA","status":401,"code":"CREDENCIAL_REVOGADA","detail":"Credencial revogada."}}}}}},"404":{"description":"Ocorrência não encontrada (ou não pertence a este fornecedor).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"NAO_ENCONTRADO":{"summary":"NAO_ENCONTRADO","value":{"type":"about:blank","title":"NAO_ENCONTRADO","status":404,"code":"NAO_ENCONTRADO","detail":"Ocorrência não encontrada."}}}}}},"409":{"description":"Identificador ambíguo.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"IDENTIFICADOR_AMBIGUO":{"summary":"IDENTIFICADOR_AMBIGUO","value":{"type":"about:blank","title":"IDENTIFICADOR_AMBIGUO","status":409,"code":"IDENTIFICADOR_AMBIGUO","detail":"Este id existe em mais de um cliente. Use o protocolo da ocorrência (ex.: QUAL-494060)."}}}}}},"422":{"description":"A fase atual não permite a ação (inclusive quando ela já foi feita).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"OPERACAO_RECUSADA":{"summary":"OPERACAO_RECUSADA","value":{"type":"about:blank","title":"OPERACAO_RECUSADA","status":422,"code":"OPERACAO_RECUSADA","detail":"A operação foi recusada pelo sistema de gestão da frota (verifique a fase atual da ocorrência)."}}}}}},"429":{"description":"Limite de chamadas atingido.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"LIMITE_DE_CHAMADAS":{"summary":"LIMITE_DE_CHAMADAS","value":{"type":"about:blank","title":"LIMITE_DE_CHAMADAS","status":429,"code":"LIMITE_DE_CHAMADAS","detail":"Limite de chamadas atingido. Tente novamente em instantes."}}}}}},"502":{"description":"Sistema do cliente indisponível no momento; tente de novo.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"SISTEMA_INDISPONIVEL":{"summary":"SISTEMA_INDISPONIVEL","value":{"type":"about:blank","title":"SISTEMA_INDISPONIVEL","status":502,"code":"SISTEMA_INDISPONIVEL","detail":"O sistema de gestão da frota está indisponível. Tente novamente em instantes."}}}}}}}}},"/contract-item-request/{id}/ongoing-services":{"post":{"tags":["Fases"],"summary":"Conclui o serviço","description":"Com orçamento de outro fornecedor na ocorrência, cada fornecedor conclui o seu: a resposta é 202 até o último concluir, e aí a fase muda.","parameters":[{"name":"id","in":"path","required":true,"description":"Protocolo da ocorrência (ex.: QUAL-494060) ou id numérico. Prefira o protocolo: ele identifica o cliente.","schema":{"type":"string"}}],"responses":{"200":{"description":"Fase alterada.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ActionResult"}}}}}},"202":{"description":"Conclusão registrada; a fase muda quando os demais fornecedores concluírem.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/CompletionPending"}}}}}},"400":{"description":"Identificador inválido.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"IDENTIFICADOR_INVALIDO":{"summary":"IDENTIFICADOR_INVALIDO","value":{"type":"about:blank","title":"IDENTIFICADOR_INVALIDO","status":400,"code":"IDENTIFICADOR_INVALIDO","detail":"Use o protocolo da ocorrência (ex.: QUAL-494060) ou o id numérico."}}}}}},"401":{"description":"Token ausente, inválido ou expirado.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"TOKEN_INVALIDO":{"summary":"TOKEN_INVALIDO","value":{"type":"about:blank","title":"TOKEN_INVALIDO","status":401,"code":"TOKEN_INVALIDO","detail":"Token inválido ou expirado. Gere um novo em POST /oauth/token."}},"CREDENCIAL_REVOGADA":{"summary":"CREDENCIAL_REVOGADA","value":{"type":"about:blank","title":"CREDENCIAL_REVOGADA","status":401,"code":"CREDENCIAL_REVOGADA","detail":"Credencial revogada."}}}}}},"404":{"description":"Ocorrência não encontrada (ou não pertence a este fornecedor).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"NAO_ENCONTRADO":{"summary":"NAO_ENCONTRADO","value":{"type":"about:blank","title":"NAO_ENCONTRADO","status":404,"code":"NAO_ENCONTRADO","detail":"Ocorrência não encontrada."}}}}}},"409":{"description":"Identificador ambíguo.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"IDENTIFICADOR_AMBIGUO":{"summary":"IDENTIFICADOR_AMBIGUO","value":{"type":"about:blank","title":"IDENTIFICADOR_AMBIGUO","status":409,"code":"IDENTIFICADOR_AMBIGUO","detail":"Este id existe em mais de um cliente. Use o protocolo da ocorrência (ex.: QUAL-494060)."}}}}}},"422":{"description":"A fase atual não permite a ação (inclusive quando ela já foi feita).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"OPERACAO_RECUSADA":{"summary":"OPERACAO_RECUSADA","value":{"type":"about:blank","title":"OPERACAO_RECUSADA","status":422,"code":"OPERACAO_RECUSADA","detail":"A operação foi recusada pelo sistema de gestão da frota (verifique a fase atual da ocorrência)."}}}}}},"429":{"description":"Limite de chamadas atingido.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"LIMITE_DE_CHAMADAS":{"summary":"LIMITE_DE_CHAMADAS","value":{"type":"about:blank","title":"LIMITE_DE_CHAMADAS","status":429,"code":"LIMITE_DE_CHAMADAS","detail":"Limite de chamadas atingido. Tente novamente em instantes."}}}}}},"502":{"description":"Sistema do cliente indisponível no momento; tente de novo.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"SISTEMA_INDISPONIVEL":{"summary":"SISTEMA_INDISPONIVEL","value":{"type":"about:blank","title":"SISTEMA_INDISPONIVEL","status":502,"code":"SISTEMA_INDISPONIVEL","detail":"O sistema de gestão da frota está indisponível. Tente novamente em instantes."}}}}}}}}},"/contract-item-request/{id}/waiting-checkout":{"post":{"tags":["Fases"],"summary":"Confirma a saída do veículo","description":"Com orçamento de outro fornecedor na ocorrência, cada fornecedor confirma: a resposta é 202 até o último confirmar, e aí a fase muda.","parameters":[{"name":"id","in":"path","required":true,"description":"Protocolo da ocorrência (ex.: QUAL-494060) ou id numérico. Prefira o protocolo: ele identifica o cliente.","schema":{"type":"string"}}],"responses":{"200":{"description":"Fase alterada.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ActionResult"}}}}}},"202":{"description":"Conclusão registrada; a fase muda quando os demais fornecedores concluírem.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/CompletionPending"}}}}}},"400":{"description":"Identificador inválido.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"IDENTIFICADOR_INVALIDO":{"summary":"IDENTIFICADOR_INVALIDO","value":{"type":"about:blank","title":"IDENTIFICADOR_INVALIDO","status":400,"code":"IDENTIFICADOR_INVALIDO","detail":"Use o protocolo da ocorrência (ex.: QUAL-494060) ou o id numérico."}}}}}},"401":{"description":"Token ausente, inválido ou expirado.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"TOKEN_INVALIDO":{"summary":"TOKEN_INVALIDO","value":{"type":"about:blank","title":"TOKEN_INVALIDO","status":401,"code":"TOKEN_INVALIDO","detail":"Token inválido ou expirado. Gere um novo em POST /oauth/token."}},"CREDENCIAL_REVOGADA":{"summary":"CREDENCIAL_REVOGADA","value":{"type":"about:blank","title":"CREDENCIAL_REVOGADA","status":401,"code":"CREDENCIAL_REVOGADA","detail":"Credencial revogada."}}}}}},"404":{"description":"Ocorrência não encontrada (ou não pertence a este fornecedor).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"NAO_ENCONTRADO":{"summary":"NAO_ENCONTRADO","value":{"type":"about:blank","title":"NAO_ENCONTRADO","status":404,"code":"NAO_ENCONTRADO","detail":"Ocorrência não encontrada."}}}}}},"409":{"description":"Identificador ambíguo.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"IDENTIFICADOR_AMBIGUO":{"summary":"IDENTIFICADOR_AMBIGUO","value":{"type":"about:blank","title":"IDENTIFICADOR_AMBIGUO","status":409,"code":"IDENTIFICADOR_AMBIGUO","detail":"Este id existe em mais de um cliente. Use o protocolo da ocorrência (ex.: QUAL-494060)."}}}}}},"422":{"description":"A fase atual não permite a ação (inclusive quando ela já foi feita).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"OPERACAO_RECUSADA":{"summary":"OPERACAO_RECUSADA","value":{"type":"about:blank","title":"OPERACAO_RECUSADA","status":422,"code":"OPERACAO_RECUSADA","detail":"A operação foi recusada pelo sistema de gestão da frota (verifique a fase atual da ocorrência)."}}}}}},"429":{"description":"Limite de chamadas atingido.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"LIMITE_DE_CHAMADAS":{"summary":"LIMITE_DE_CHAMADAS","value":{"type":"about:blank","title":"LIMITE_DE_CHAMADAS","status":429,"code":"LIMITE_DE_CHAMADAS","detail":"Limite de chamadas atingido. Tente novamente em instantes."}}}}}},"502":{"description":"Sistema do cliente indisponível no momento; tente de novo.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"SISTEMA_INDISPONIVEL":{"summary":"SISTEMA_INDISPONIVEL","value":{"type":"about:blank","title":"SISTEMA_INDISPONIVEL","status":502,"code":"SISTEMA_INDISPONIVEL","detail":"O sistema de gestão da frota está indisponível. Tente novamente em instantes."}}}}}}}}},"/contract-item-request/{id}/files":{"get":{"tags":["Arquivos"],"summary":"Fotos e vídeos da ocorrência, com URL de download","description":"Imagens e vídeos. Arquivos ainda em envio vêm com `status` queued, processing ou error e URL temporária (15 min).","parameters":[{"name":"id","in":"path","required":true,"description":"Protocolo da ocorrência (ex.: QUAL-494060) ou id numérico. Prefira o protocolo: ele identifica o cliente.","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/File"}},"count":{"type":"integer"}}}}}},"400":{"description":"Identificador inválido.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"IDENTIFICADOR_INVALIDO":{"summary":"IDENTIFICADOR_INVALIDO","value":{"type":"about:blank","title":"IDENTIFICADOR_INVALIDO","status":400,"code":"IDENTIFICADOR_INVALIDO","detail":"Use o protocolo da ocorrência (ex.: QUAL-494060) ou o id numérico."}}}}}},"401":{"description":"Token ausente, inválido ou expirado.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"TOKEN_INVALIDO":{"summary":"TOKEN_INVALIDO","value":{"type":"about:blank","title":"TOKEN_INVALIDO","status":401,"code":"TOKEN_INVALIDO","detail":"Token inválido ou expirado. Gere um novo em POST /oauth/token."}},"CREDENCIAL_REVOGADA":{"summary":"CREDENCIAL_REVOGADA","value":{"type":"about:blank","title":"CREDENCIAL_REVOGADA","status":401,"code":"CREDENCIAL_REVOGADA","detail":"Credencial revogada."}}}}}},"404":{"description":"Ocorrência não encontrada (ou não pertence a este fornecedor).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"NAO_ENCONTRADO":{"summary":"NAO_ENCONTRADO","value":{"type":"about:blank","title":"NAO_ENCONTRADO","status":404,"code":"NAO_ENCONTRADO","detail":"Ocorrência não encontrada."}}}}}},"409":{"description":"Identificador ambíguo.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"IDENTIFICADOR_AMBIGUO":{"summary":"IDENTIFICADOR_AMBIGUO","value":{"type":"about:blank","title":"IDENTIFICADOR_AMBIGUO","status":409,"code":"IDENTIFICADOR_AMBIGUO","detail":"Este id existe em mais de um cliente. Use o protocolo da ocorrência (ex.: QUAL-494060)."}}}}}},"429":{"description":"Limite de chamadas atingido.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"LIMITE_DE_CHAMADAS":{"summary":"LIMITE_DE_CHAMADAS","value":{"type":"about:blank","title":"LIMITE_DE_CHAMADAS","status":429,"code":"LIMITE_DE_CHAMADAS","detail":"Limite de chamadas atingido. Tente novamente em instantes."}}}}}},"502":{"description":"Sistema do cliente indisponível no momento; tente de novo.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"SISTEMA_INDISPONIVEL":{"summary":"SISTEMA_INDISPONIVEL","value":{"type":"about:blank","title":"SISTEMA_INDISPONIVEL","status":502,"code":"SISTEMA_INDISPONIVEL","detail":"O sistema de gestão da frota está indisponível. Tente novamente em instantes."}}}}}}}}},"/contract-item-request/{id}/file":{"post":{"tags":["Arquivos"],"summary":"Envia arquivo (imagem, vídeo ou PDF, até 8 MB)","parameters":[{"name":"id","in":"path","required":true,"description":"Protocolo da ocorrência (ex.: QUAL-494060) ou id numérico. Prefira o protocolo: ele identifica o cliente.","schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":true,"description":"Chave única por operação (8–200 caracteres). Reenvio com a mesma chave devolve a mesma resposta.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FileInput"}}}},"responses":{"202":{"description":"Recebido","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ActionResult"}}}}}},"400":{"description":"Arquivo inválido.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"ARQUIVO_INVALIDO":{"summary":"ARQUIVO_INVALIDO","value":{"type":"about:blank","title":"ARQUIVO_INVALIDO","status":400,"code":"ARQUIVO_INVALIDO","detail":"Envie fileName e base64Document."}},"TIPO_DE_ARQUIVO_NAO_PERMITIDO":{"summary":"TIPO_DE_ARQUIVO_NAO_PERMITIDO","value":{"type":"about:blank","title":"TIPO_DE_ARQUIVO_NAO_PERMITIDO","status":400,"code":"TIPO_DE_ARQUIVO_NAO_PERMITIDO","detail":"Envie imagem, vídeo ou PDF."}}}}}},"401":{"description":"Token ausente, inválido ou expirado.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"TOKEN_INVALIDO":{"summary":"TOKEN_INVALIDO","value":{"type":"about:blank","title":"TOKEN_INVALIDO","status":401,"code":"TOKEN_INVALIDO","detail":"Token inválido ou expirado. Gere um novo em POST /oauth/token."}},"CREDENCIAL_REVOGADA":{"summary":"CREDENCIAL_REVOGADA","value":{"type":"about:blank","title":"CREDENCIAL_REVOGADA","status":401,"code":"CREDENCIAL_REVOGADA","detail":"Credencial revogada."}}}}}},"404":{"description":"Ocorrência não encontrada (ou não pertence a este fornecedor).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"NAO_ENCONTRADO":{"summary":"NAO_ENCONTRADO","value":{"type":"about:blank","title":"NAO_ENCONTRADO","status":404,"code":"NAO_ENCONTRADO","detail":"Ocorrência não encontrada."}}}}}},"409":{"description":"Identificador ambíguo ou operação com a mesma Idempotency-Key em andamento.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"IDENTIFICADOR_AMBIGUO":{"summary":"IDENTIFICADOR_AMBIGUO","value":{"type":"about:blank","title":"IDENTIFICADOR_AMBIGUO","status":409,"code":"IDENTIFICADOR_AMBIGUO","detail":"Este id existe em mais de um cliente. Use o protocolo da ocorrência (ex.: QUAL-494060)."}},"OPERACAO_EM_ANDAMENTO":{"summary":"OPERACAO_EM_ANDAMENTO","value":{"type":"about:blank","title":"OPERACAO_EM_ANDAMENTO","status":409,"code":"OPERACAO_EM_ANDAMENTO","detail":"Já existe uma operação com esta Idempotency-Key em andamento."}}}}}},"413":{"description":"Arquivo grande demais.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"ARQUIVO_GRANDE_DEMAIS":{"summary":"ARQUIVO_GRANDE_DEMAIS","value":{"type":"about:blank","title":"ARQUIVO_GRANDE_DEMAIS","status":413,"code":"ARQUIVO_GRANDE_DEMAIS","detail":"Arquivo acima de 8 MB."}}}}}},"429":{"description":"Limite de chamadas atingido.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"LIMITE_DE_CHAMADAS":{"summary":"LIMITE_DE_CHAMADAS","value":{"type":"about:blank","title":"LIMITE_DE_CHAMADAS","status":429,"code":"LIMITE_DE_CHAMADAS","detail":"Limite de chamadas atingido. Tente novamente em instantes."}}}}}},"502":{"description":"Sistema do cliente indisponível no momento; tente de novo.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"SISTEMA_INDISPONIVEL":{"summary":"SISTEMA_INDISPONIVEL","value":{"type":"about:blank","title":"SISTEMA_INDISPONIVEL","status":502,"code":"SISTEMA_INDISPONIVEL","detail":"O sistema de gestão da frota está indisponível. Tente novamente em instantes."}}}}}}}}},"/financial-invoice/{id}":{"get":{"tags":["Notas fiscais"],"summary":"Notas esperadas da ocorrência e a situação de cada uma","description":"Uma linha por nota: para cada orçamento aprovado (acima de R$ 0,01), os serviços (`SERVICE`) e as peças (`PRODUCT`) — ou uma nota só (`UNIFIED`), quando o cliente permite nota unificada para você e o orçamento tem os dois.\n\n| status | Situação |\n|---|---|\n| AG_NOTA_FISCAL | Falta a nota (nunca enviada ou devolvida — veja `returnReason`) |\n| AG_VALIDACAO | Nota enviada, em análise |\n| VALIDADA | Nota validada |\n| PAGA | Pagamento feito |\n\nEnvie cada nota em `POST /financial-invoice` com o `orderId` e o `type` da linha (`UNIFIED` = `itemTypes: [SERVICE, PRODUCT]`).","parameters":[{"name":"id","in":"path","required":true,"description":"Protocolo da ocorrência (ex.: QUAL-494060) ou id numérico. Prefira o protocolo: ele identifica o cliente.","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/InvoiceOverview"}}}}}},"400":{"description":"Identificador inválido.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"IDENTIFICADOR_INVALIDO":{"summary":"IDENTIFICADOR_INVALIDO","value":{"type":"about:blank","title":"IDENTIFICADOR_INVALIDO","status":400,"code":"IDENTIFICADOR_INVALIDO","detail":"Use o protocolo da ocorrência (ex.: QUAL-494060) ou o id numérico."}}}}}},"401":{"description":"Token ausente, inválido ou expirado.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"TOKEN_INVALIDO":{"summary":"TOKEN_INVALIDO","value":{"type":"about:blank","title":"TOKEN_INVALIDO","status":401,"code":"TOKEN_INVALIDO","detail":"Token inválido ou expirado. Gere um novo em POST /oauth/token."}},"CREDENCIAL_REVOGADA":{"summary":"CREDENCIAL_REVOGADA","value":{"type":"about:blank","title":"CREDENCIAL_REVOGADA","status":401,"code":"CREDENCIAL_REVOGADA","detail":"Credencial revogada."}}}}}},"404":{"description":"Ocorrência não encontrada (ou não pertence a este fornecedor).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"NAO_ENCONTRADO":{"summary":"NAO_ENCONTRADO","value":{"type":"about:blank","title":"NAO_ENCONTRADO","status":404,"code":"NAO_ENCONTRADO","detail":"Ocorrência não encontrada."}}}}}},"409":{"description":"Identificador ambíguo.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"IDENTIFICADOR_AMBIGUO":{"summary":"IDENTIFICADOR_AMBIGUO","value":{"type":"about:blank","title":"IDENTIFICADOR_AMBIGUO","status":409,"code":"IDENTIFICADOR_AMBIGUO","detail":"Este id existe em mais de um cliente. Use o protocolo da ocorrência (ex.: QUAL-494060)."}}}}}},"429":{"description":"Limite de chamadas atingido.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"LIMITE_DE_CHAMADAS":{"summary":"LIMITE_DE_CHAMADAS","value":{"type":"about:blank","title":"LIMITE_DE_CHAMADAS","status":429,"code":"LIMITE_DE_CHAMADAS","detail":"Limite de chamadas atingido. Tente novamente em instantes."}}}}}},"502":{"description":"Sistema do cliente indisponível no momento; tente de novo.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"SISTEMA_INDISPONIVEL":{"summary":"SISTEMA_INDISPONIVEL","value":{"type":"about:blank","title":"SISTEMA_INDISPONIVEL","status":502,"code":"SISTEMA_INDISPONIVEL","detail":"O sistema de gestão da frota está indisponível. Tente novamente em instantes."}}}}}}}}},"/financial-invoice":{"post":{"tags":["Notas fiscais"],"summary":"Envia a nota fiscal de um orçamento aprovado","description":"Uma nota por orçamento: os serviços, as peças, ou os dois numa nota só (`itemTypes`; unificada exige permissão do cliente).\n\n- Serviço → NFS-e; peças → NF-e ou NF-DANFe; unificada → NFS-e.\n- Envie o XML e/ou o PDF da nota. Só com PDF (a conferência é feita pela leitura do documento), informe `documentType`, `invoiceNumber` e `issueDate`.\n- Com XML, número, série, emissão e valor vêm do documento e são conferidos com o orçamento e os CNPJs.\n- Nota devolvida para os mesmos itens é substituída automaticamente.\n\nDivergência na pré-validação volta como 422 `NOTA_DIVERGENTE`, com `divergences` e `correctionToken`. Reenvie o mesmo pedido, com o **mesmo arquivo** da nota, mais o `correctionToken`:\n- com os campos corrigidos (`invoiceNumber`, `invoiceSeries`, `issueDate`, `payment.dueDate`), a nota segue;\n- sem corrigir, a nota vai para validação manual do cliente.\n\nO que falta faturar em cada ocorrência: `GET /financial-invoice/{id}`. Ocorrências esperando nota: `GET /contract-item-request?workflowStepId=901`.\n\nCada arquivo até 10 MB.","parameters":[{"name":"Idempotency-Key","in":"header","required":true,"description":"Chave única por operação (8–200 caracteres). Reenvio com a mesma chave devolve a mesma resposta.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvoiceSubmissionInput"}}}},"responses":{"202":{"description":"Nota recebida","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"ids":{"type":"array","items":{"type":"string","format":"uuid"}},"status":{"const":"em_analise"},"message":{"type":"string"}}}}}}}},"400":{"description":"Dados ou arquivos inválidos.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"OCORRENCIA_OBRIGATORIA":{"summary":"OCORRENCIA_OBRIGATORIA","value":{"type":"about:blank","title":"OCORRENCIA_OBRIGATORIA","status":400,"code":"OCORRENCIA_OBRIGATORIA","detail":"Informe contractItemRequest (protocolo da ocorrência)."}},"ORCAMENTO_OBRIGATORIO":{"summary":"ORCAMENTO_OBRIGATORIO","value":{"type":"about:blank","title":"ORCAMENTO_OBRIGATORIO","status":400,"code":"ORCAMENTO_OBRIGATORIO","detail":"Informe orderId (orçamento da ocorrência)."}},"NOTA_OBRIGATORIA":{"summary":"NOTA_OBRIGATORIA","value":{"type":"about:blank","title":"NOTA_OBRIGATORIA","status":400,"code":"NOTA_OBRIGATORIA","detail":"Envie o XML ou o PDF da nota."}},"TIPO_DE_DOCUMENTO_OBRIGATORIO":{"summary":"TIPO_DE_DOCUMENTO_OBRIGATORIO","value":{"type":"about:blank","title":"TIPO_DE_DOCUMENTO_OBRIGATORIO","status":400,"code":"TIPO_DE_DOCUMENTO_OBRIGATORIO","detail":"Sem XML, informe documentType (NFE, NFSE ou DANFE)."}},"PAGAMENTO_INVALIDO":{"summary":"PAGAMENTO_INVALIDO","value":{"type":"about:blank","title":"PAGAMENTO_INVALIDO","status":400,"code":"PAGAMENTO_INVALIDO","detail":"Informe payment.method: PIX, TRANSFER, BOLETO ou CREDIT_CARD."}}}}}},"401":{"description":"Token ausente, inválido ou expirado.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"TOKEN_INVALIDO":{"summary":"TOKEN_INVALIDO","value":{"type":"about:blank","title":"TOKEN_INVALIDO","status":401,"code":"TOKEN_INVALIDO","detail":"Token inválido ou expirado. Gere um novo em POST /oauth/token."}},"CREDENCIAL_REVOGADA":{"summary":"CREDENCIAL_REVOGADA","value":{"type":"about:blank","title":"CREDENCIAL_REVOGADA","status":401,"code":"CREDENCIAL_REVOGADA","detail":"Credencial revogada."}}}}}},"403":{"description":"Nota unificada sem permissão do cliente.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"SEM_PERMISSAO_NOTA_UNIFICADA":{"summary":"SEM_PERMISSAO_NOTA_UNIFICADA","value":{"type":"about:blank","title":"SEM_PERMISSAO_NOTA_UNIFICADA","status":403,"code":"SEM_PERMISSAO_NOTA_UNIFICADA","detail":"Este cliente não permite nota unificada (serviços e peças na mesma nota)."}}}}}},"404":{"description":"Ocorrência ou orçamento não encontrado.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"NAO_ENCONTRADO":{"summary":"NAO_ENCONTRADO","value":{"type":"about:blank","title":"NAO_ENCONTRADO","status":404,"code":"NAO_ENCONTRADO","detail":"Orçamento não encontrado."}}}}}},"409":{"description":"Identificador ambíguo.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"IDENTIFICADOR_AMBIGUO":{"summary":"IDENTIFICADOR_AMBIGUO","value":{"type":"about:blank","title":"IDENTIFICADOR_AMBIGUO","status":409,"code":"IDENTIFICADOR_AMBIGUO","detail":"Este id existe em mais de um cliente. Use o protocolo da ocorrência (ex.: QUAL-494060)."}}}}}},"413":{"description":"Arquivo grande demais.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"ARQUIVO_GRANDE_DEMAIS":{"summary":"ARQUIVO_GRANDE_DEMAIS","value":{"type":"about:blank","title":"ARQUIVO_GRANDE_DEMAIS","status":413,"code":"ARQUIVO_GRANDE_DEMAIS","detail":"Arquivo acima de 10 MB."}}}}}},"422":{"description":"NOTA_DIVERGENTE traz `divergences` e `correctionToken`; os demais códigos, só `detail`.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/InvoiceProblem"},"examples":{"NOTA_DIVERGENTE":{"summary":"NOTA_DIVERGENTE","value":{"type":"about:blank","title":"NOTA_DIVERGENTE","status":422,"code":"NOTA_DIVERGENTE","detail":"A nota diverge do esperado.","divergences":[{"field":"totalValue","message":"Valor da nota (R$ 1.200,00) diferente do orçamento (R$ 1.250,00)."}],"correctionToken":"eyJ..."}},"ORCAMENTO_NAO_APROVADO":{"summary":"ORCAMENTO_NAO_APROVADO","value":{"type":"about:blank","title":"ORCAMENTO_NAO_APROVADO","status":422,"code":"ORCAMENTO_NAO_APROVADO","detail":"A ordem de compra deste orçamento ainda não foi aprovada."}},"SEM_ITENS_PARA_FATURAR":{"summary":"SEM_ITENS_PARA_FATURAR","value":{"type":"about:blank","title":"SEM_ITENS_PARA_FATURAR","status":422,"code":"SEM_ITENS_PARA_FATURAR","detail":"Não há itens deste tipo para faturar neste orçamento."}},"DOCUMENTO_INCOMPATIVEL":{"summary":"DOCUMENTO_INCOMPATIVEL","value":{"type":"about:blank","title":"DOCUMENTO_INCOMPATIVEL","status":422,"code":"DOCUMENTO_INCOMPATIVEL","detail":"NFS-e só para serviços; NF-e ou NF-DANFe só para peças."}},"FORMA_DE_PAGAMENTO_NAO_ACEITA":{"summary":"FORMA_DE_PAGAMENTO_NAO_ACEITA","value":{"type":"about:blank","title":"FORMA_DE_PAGAMENTO_NAO_ACEITA","status":422,"code":"FORMA_DE_PAGAMENTO_NAO_ACEITA","detail":"Este cliente não aceita esta forma de pagamento."}},"VENCIMENTO_ANTES_DO_PRAZO":{"summary":"VENCIMENTO_ANTES_DO_PRAZO","value":{"type":"about:blank","title":"VENCIMENTO_ANTES_DO_PRAZO","status":422,"code":"VENCIMENTO_ANTES_DO_PRAZO","detail":"O vencimento do boleto é anterior ao prazo mínimo do cliente."}},"TOKEN_DE_CORRECAO_INVALIDO":{"summary":"TOKEN_DE_CORRECAO_INVALIDO","value":{"type":"about:blank","title":"TOKEN_DE_CORRECAO_INVALIDO","status":422,"code":"TOKEN_DE_CORRECAO_INVALIDO","detail":"correctionToken inválido ou expirado, ou de outra nota: reenvie o mesmo arquivo da nota que recebeu o token."}}}}}},"429":{"description":"Limite de chamadas atingido.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"LIMITE_DE_CHAMADAS":{"summary":"LIMITE_DE_CHAMADAS","value":{"type":"about:blank","title":"LIMITE_DE_CHAMADAS","status":429,"code":"LIMITE_DE_CHAMADAS","detail":"Limite de chamadas atingido. Tente novamente em instantes."}}}}}},"502":{"description":"Sistema do cliente indisponível no momento; tente de novo.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"SISTEMA_INDISPONIVEL":{"summary":"SISTEMA_INDISPONIVEL","value":{"type":"about:blank","title":"SISTEMA_INDISPONIVEL","status":502,"code":"SISTEMA_INDISPONIVEL","detail":"O sistema de gestão da frota está indisponível. Tente novamente em instantes."}}}}}}}}}},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT"}},"schemas":{"Problem":{"type":"object","description":"Erro (RFC 9457). Decida pelo `code`; `detail` é a mensagem para pessoas.","properties":{"type":{"type":"string","example":"about:blank"},"title":{"type":"string","description":"Igual ao code."},"status":{"type":"integer"},"code":{"type":"string"},"detail":{"type":"string"}}},"OrderProblem":{"allOf":[{"$ref":"#/components/schemas/Problem"},{"type":"object","properties":{"violations":{"type":"array","description":"Só em ORCAMENTO_INVALIDO: uma linha por regra não atendida.","items":{"type":"object","properties":{"code":{"type":"string","example":"VALOR_ACIMA_LIMITE"},"message":{"type":"string"},"field":{"type":"string","example":"items[0].unitPrice"},"maxPrice":{"type":"number","description":"Só em VALOR_ACIMA_LIMITE."}}}}}}]},"InvoiceProblem":{"allOf":[{"$ref":"#/components/schemas/Problem"},{"type":"object","properties":{"divergences":{"type":"array","description":"Só em NOTA_DIVERGENTE.","items":{"type":"object","properties":{"field":{"type":"string"},"message":{"type":"string"}}}},"correctionToken":{"type":"string","description":"Só em NOTA_DIVERGENTE: reenvie o mesmo pedido e o mesmo arquivo com ele (vale 24 h)."}}}]},"ProviderMe":{"type":"object","properties":{"providerUuid":{"type":"string","format":"uuid"},"providerName":{"type":"string"},"providerCnpj":{"type":["string","null"]},"tenants":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"requestNumberPrefix":{"type":["string","null"],"example":"QUAL"},"providerIds":{"type":"array","items":{"type":"integer"},"description":"Seu código (providerId) neste cliente."}}}}}},"Occurrence":{"type":"object","properties":{"id":{"type":"integer"},"requestNumber":{"type":"string","example":"QUAL-494060"},"tenantId":{"type":["string","null"],"format":"uuid"},"tenantSlug":{"type":["string","null"]},"reasonId":{"type":["integer","null"]},"reasonName":{"type":["string","null"]},"reasonClassName":{"type":["string","null"]},"statusId":{"type":["integer","null"]},"workflowStepId":{"type":["integer","null"],"example":15,"description":"Fase atual (veja a tabela de fases na introdução)."},"workflowStepName":{"type":["string","null"],"example":"Serviço em Execução"},"vehicleId":{"type":["integer","null"]},"vehicleModelId":{"type":["integer","null"]},"licensePlate":{"type":["string","null"]},"vehicleModel":{"type":["string","null"]},"createdAt":{"type":["string","null"]},"createdByName":{"type":["string","null"]},"description":{"type":["string","null"],"description":"Relato da manutenção ou do sinistro."},"state":{"type":["string","null"],"description":"UF."},"scheduledFor":{"type":["string","null"],"description":"Data agendada."},"schedulingOption1":{"type":["string","null"],"description":"Datas sugeridas para agendamento (até 3)."},"schedulingOption2":{"type":["string","null"]},"schedulingOption3":{"type":["string","null"]},"providerId":{"type":["integer","null"],"description":"Seu código no cliente; null quando a ocorrência é de outro fornecedor e você tem orçamento nela."},"providerName":{"type":["string","null"]},"providerRegisteredNumber":{"type":["string","null"],"description":"CNPJ."},"providerDirection":{"type":["string","null"],"description":"Como a ocorrência chegou a você (ex.: Direcionado)."},"serviceCompletedAt":{"type":["string","null"],"description":"Quando você concluiu o serviço, se a ocorrência tem outros fornecedores e a fase ainda espera por eles."},"checkoutConfirmedAt":{"type":["string","null"],"description":"Quando você confirmou a saída, idem."},"orders":{"type":"array","description":"Seus orçamentos, com itens.","items":{"$ref":"#/components/schemas/Order"}}}},"ListedOccurrence":{"type":"object","properties":{"id":{"type":"integer"},"requestNumber":{"type":"string","example":"QUAL-506821"},"tenantId":{"type":"string","format":"uuid"},"tenantSlug":{"type":"string","example":"quality"},"reasonId":{"type":["integer","null"],"example":3},"reasonName":{"type":["string","null"],"example":"Sinistro"},"statusName":{"type":["string","null"]},"workflowStepId":{"type":["integer","null"],"example":901,"description":"Fase atual (veja a tabela de fases na introdução)."},"workflowStepName":{"type":["string","null"],"example":"Ag. Nota Fiscal"},"vehicleId":{"type":["integer","null"]},"licensePlate":{"type":["string","null"],"example":"ABC1D23"},"vehicleModel":{"type":["string","null"]},"providerId":{"type":["integer","null"],"description":"Seu código no cliente."},"providerTradingName":{"type":["string","null"]},"providerRegisteredNumber":{"type":["string","null"]},"scheduledFor":{"type":["string","null"]},"createdAt":{"type":["string","null"]},"totalOrders":{"type":["number","null"],"description":"Soma dos orçamentos com ordem de compra aprovada."},"totalInvoices":{"type":["number","null"],"description":"Soma das notas enviadas."},"invoiceStatus":{"type":["string","null"],"example":"PENDING","description":"PENDING (falta nota), RETURNED (devolvida), VALIDATING (em análise), VALIDATED (validada), UNAVAILABLE (fora da fase de nota)."},"hasMultipleProviders":{"type":"boolean","description":"Há mais de um fornecedor na ocorrência."},"active":{"type":"boolean","description":"false = encerrada."}}},"Order":{"type":"object","properties":{"id":{"type":["integer","null"]},"orderNumber":{"type":["string","null"]},"statusId":{"type":["integer","null"]},"statusName":{"type":["string","null"]},"createdAt":{"type":["string","null"]},"total":{"type":["number","null"]},"odometer":{"type":["number","null"]},"providerId":{"type":["integer","null"],"description":"null quando o fornecedor principal do orçamento é outro (só os itens deste fornecedor vêm)."},"providerTradingName":{"type":["string","null"]},"providerRegisteredNumber":{"type":["string","null"]},"purchaseOrderId":{"type":["integer","null"]},"purchaseOrderNumber":{"type":["string","null"]},"purchaseOrderApprovalStatus":{"type":["string","null"],"example":"Aprovada"},"items":{"type":"array","items":{"$ref":"#/components/schemas/OrderItem"}}}},"OrderItem":{"type":"object","properties":{"id":{"type":["integer","null"]},"partId":{"type":["integer","null"]},"partName":{"type":["string","null"]},"typeId":{"type":["integer","null"],"description":"1 = serviço; 2 = peça."},"typeName":{"type":["string","null"]},"quantity":{"type":["number","null"]},"unitPrice":{"type":["number","null"]},"discount":{"type":["number","null"]},"total":{"type":["number","null"]},"description":{"type":["string","null"]},"reason":{"type":["string","null"],"description":"Observação do item (ex.: marca)."},"expenseGroupId":{"type":["integer","null"]},"statusId":{"type":["integer","null"],"description":"Situação do item: 1 = em aberto; 2 = validado; 3 = pago."}}},"OrderInput":{"type":"object","required":["odometer","completionDate","items"],"properties":{"odometer":{"type":"number","exclusiveMinimum":0},"completionDate":{"type":"string","format":"date-time","description":"Previsão de finalização."},"items":{"type":"array","minItems":1,"maxItems":200,"items":{"type":"object","required":["partId","quantity","unitPrice"],"properties":{"partId":{"type":"integer","description":"Item do catálogo (GET /part)."},"quantity":{"type":"number","exclusiveMinimum":0},"unitPrice":{"type":"number","minimum":0,"description":"Até o maxPrice do catálogo, quando cadastrado."},"discount":{"type":"number","minimum":0,"default":0,"description":"Valor (R$), não percentual."},"brand":{"type":"string","description":"Obrigatório para peça (PRODUTO) e pneu."},"dot":{"type":"string","description":"Obrigatório para pneu (itens \"PN ...\")."},"observation":{"type":"string"},"expenseGroupId":{"type":"integer"}}}}}},"OrderCreated":{"type":"object","properties":{"id":{"type":["integer","null"]},"orderNumber":{"type":["string","null"]},"contractItemRequestId":{"type":"integer"},"requestNumber":{"type":["string","null"]}}},"CatalogPart":{"type":"object","properties":{"partId":{"type":"integer"},"name":{"type":"string"},"code":{"type":["string","null"]},"typeId":{"type":["integer","null"],"description":"1 = serviço; 2 = peça."},"typeName":{"type":["string","null"]},"maxPrice":{"type":["number","null"],"description":"Valor unitário máximo aceito; null = sem limite cadastrado."},"isRevision":{"type":"boolean","description":"Item de revisão: o plano dele vem em GET /part?revisionPartId={partId}."},"revisionPartId":{"type":["integer","null"],"description":"Revisão a que o item pertence (só na consulta do plano)."},"quantity":{"type":["number","null"],"description":"Quantidade do plano (só na consulta do plano)."},"unitPrice":{"type":["number","null"],"description":"Valor do plano (só na consulta do plano). Com ele, o item não passa pelo valor máximo."}}},"File":{"type":"object","properties":{"id":{"type":"string"},"fileName":{"type":"string"},"extension":{"type":["string","null"]},"type":{"type":["string","null"]},"contentType":{"type":["string","null"]},"size":{"type":["integer","null"]},"url":{"type":"string","format":"uri"},"createdAt":{"type":["string","null"]},"status":{"enum":["sent","queued","processing","error"],"description":"sent = recebido pelo cliente; queued/processing = em envio; error = falhou (veja error)."},"error":{"type":["string","null"],"description":"Motivo, quando status = error."}}},"FileInput":{"type":"object","required":["fileName","base64Document"],"properties":{"fileName":{"type":"string"},"base64Document":{"type":"string","contentEncoding":"base64"}}},"InvoiceSubmissionInput":{"type":"object","required":["contractItemRequest","payment"],"properties":{"contractItemRequest":{"type":"string","example":"QUAL-494060"},"orderId":{"type":"integer","description":"Orçamento (orderId de GET /financial-invoice/{id})."},"itemTypes":{"type":"array","items":{"enum":["SERVICE","PRODUCT"]},"description":"O que a nota cobre. Padrão: pelo documento (NFS-e → SERVICE; NF-e/NF-DANFe → PRODUCT). Os dois = nota unificada."},"documentType":{"enum":["NFE","NFSE","DANFE"],"description":"Obrigatório sem XML."},"xml":{"$ref":"#/components/schemas/FileInput"},"pdf":{"$ref":"#/components/schemas/FileInput"},"invoiceNumber":{"type":"string","description":"Obrigatório sem XML; com XML, conferido contra ele."},"invoiceSeries":{"type":"string"},"issueDate":{"type":"string","format":"date","description":"Obrigatório sem XML."},"payment":{"type":"object","required":["method"],"properties":{"method":{"enum":["PIX","TRANSFER","BOLETO","CREDIT_CARD"]},"pixKey":{"type":"string"},"bankName":{"type":"string"},"agency":{"type":"string"},"account":{"type":"string"},"dueDate":{"type":"string","format":"date","description":"Boleto: a partir do prazo mínimo do cliente."},"comments":{"type":"string","description":"Cartão de crédito."},"file":{"$ref":"#/components/schemas/FileInput"}}},"correctionToken":{"type":"string","description":"Do 422 NOTA_DIVERGENTE: a nota já passou pela pré-validação. Corrigida, segue; sem correção, vai para validação manual."}}},"InvoiceOverview":{"type":"object","properties":{"id":{"type":"integer"},"requestNumber":{"type":["string","null"],"example":"QUAL-494060"},"tenantSlug":{"type":["string","null"]},"workflowStepId":{"type":["integer","null"],"example":901},"workflowStepName":{"type":["string","null"],"example":"Ag. Nota Fiscal"},"unifiedInvoiceAllowed":{"type":"boolean","description":"O cliente permite nota unificada (serviços + peças) para você."},"orders":{"type":"array","items":{"type":"object","properties":{"orderId":{"type":"integer"},"orderNumber":{"type":["string","null"]},"purchaseOrderId":{"type":["integer","null"]},"purchaseOrderNumber":{"type":["string","null"]},"type":{"enum":["SERVICE","PRODUCT","UNIFIED"]},"expectedTotal":{"type":"number","description":"Valor esperado da nota."},"status":{"enum":["AG_NOTA_FISCAL","AG_VALIDACAO","VALIDADA","PAGA"]},"invoiceId":{"type":["string","null"],"format":"uuid","description":"Última nota enviada para estes itens."},"invoiceNumber":{"type":["string","null"]},"returnReason":{"type":["string","null"],"description":"Motivo da devolução, quando a nota voltou."}}}}}},"ActionResult":{"type":"object","properties":{"success":{"const":true},"message":{"type":"string"}}},"CompletionPending":{"type":"object","properties":{"success":{"const":true},"message":{"type":"string"},"completedAt":{"type":"string","description":"Quando a sua conclusão foi registrada."},"pendingProviders":{"type":"integer","description":"Fornecedores da ocorrência que ainda não concluíram."}}}}}}